@fluidframework/tree 2.42.0 → 2.43.0-343119

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/api-report/tree.alpha.api.md +59 -21
  2. package/api-report/tree.beta.api.md +33 -0
  3. package/dist/alpha.d.ts +11 -6
  4. package/dist/beta.d.ts +6 -1
  5. package/dist/core/index.d.ts +1 -1
  6. package/dist/core/index.d.ts.map +1 -1
  7. package/dist/core/index.js +5 -2
  8. package/dist/core/index.js.map +1 -1
  9. package/dist/core/schema-stored/formatV2.d.ts +80 -0
  10. package/dist/core/schema-stored/formatV2.d.ts.map +1 -0
  11. package/dist/core/schema-stored/formatV2.js +55 -0
  12. package/dist/core/schema-stored/formatV2.js.map +1 -0
  13. package/dist/core/schema-stored/index.d.ts +3 -1
  14. package/dist/core/schema-stored/index.d.ts.map +1 -1
  15. package/dist/core/schema-stored/index.js +5 -2
  16. package/dist/core/schema-stored/index.js.map +1 -1
  17. package/dist/core/schema-stored/schema.d.ts +49 -17
  18. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  19. package/dist/core/schema-stored/schema.js +65 -22
  20. package/dist/core/schema-stored/schema.js.map +1 -1
  21. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +9 -7
  22. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  23. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +13 -9
  24. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  25. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +3 -3
  26. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  27. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +6 -6
  28. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  29. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts +1 -1
  30. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  31. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +3 -3
  32. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  33. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +8 -3
  34. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  35. package/dist/feature-libraries/detachedFieldIndexSummarizer.js +2 -5
  36. package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  37. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +23 -24
  38. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  39. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  40. package/dist/feature-libraries/flex-tree/index.d.ts +0 -1
  41. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  42. package/dist/feature-libraries/flex-tree/index.js +1 -7
  43. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  44. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +2 -2
  45. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  46. package/dist/feature-libraries/flex-tree/lazyEntity.js +3 -0
  47. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  48. package/dist/feature-libraries/flex-tree/lazyField.d.ts +1 -2
  49. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  50. package/dist/feature-libraries/flex-tree/lazyField.js +2 -5
  51. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  52. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +5 -5
  53. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  54. package/dist/feature-libraries/flex-tree/lazyNode.js +15 -7
  55. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  56. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +8 -3
  57. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  58. package/dist/feature-libraries/forest-summary/forestSummarizer.js +2 -5
  59. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  60. package/dist/feature-libraries/index.d.ts +2 -2
  61. package/dist/feature-libraries/index.d.ts.map +1 -1
  62. package/dist/feature-libraries/index.js +1 -2
  63. package/dist/feature-libraries/index.js.map +1 -1
  64. package/dist/feature-libraries/mapTreeCursor.d.ts +16 -2
  65. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  66. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  67. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +1 -1
  68. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js +2 -0
  69. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
  70. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  71. package/dist/feature-libraries/object-forest/objectForest.js +2 -0
  72. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  73. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  74. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -4
  75. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  76. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -36
  77. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  78. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +3 -3
  79. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  80. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  81. package/dist/feature-libraries/schema-index/codec.js +59 -9
  82. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  83. package/dist/feature-libraries/schema-index/formatV1.d.ts +1 -1
  84. package/dist/feature-libraries/schema-index/formatV2.d.ts +42 -0
  85. package/dist/feature-libraries/schema-index/formatV2.d.ts.map +1 -0
  86. package/dist/feature-libraries/schema-index/formatV2.js +26 -0
  87. package/dist/feature-libraries/schema-index/formatV2.js.map +1 -0
  88. package/dist/feature-libraries/schema-index/index.d.ts +2 -1
  89. package/dist/feature-libraries/schema-index/index.d.ts.map +1 -1
  90. package/dist/feature-libraries/schema-index/index.js +4 -2
  91. package/dist/feature-libraries/schema-index/index.js.map +1 -1
  92. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +7 -2
  93. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  94. package/dist/feature-libraries/schema-index/schemaSummarizer.js +6 -6
  95. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  96. package/dist/index.d.ts +2 -2
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js.map +1 -1
  99. package/dist/packageVersion.d.ts +1 -1
  100. package/dist/packageVersion.d.ts.map +1 -1
  101. package/dist/packageVersion.js +1 -1
  102. package/dist/packageVersion.js.map +1 -1
  103. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  104. package/dist/shared-tree/schematizeTree.js +1 -0
  105. package/dist/shared-tree/schematizeTree.js.map +1 -1
  106. package/dist/shared-tree/sharedTree.d.ts +5 -1
  107. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  108. package/dist/shared-tree/sharedTree.js +34 -5
  109. package/dist/shared-tree/sharedTree.js.map +1 -1
  110. package/dist/shared-tree/treeAlpha.d.ts +1 -1
  111. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  112. package/dist/shared-tree/treeAlpha.js +12 -11
  113. package/dist/shared-tree/treeAlpha.js.map +1 -1
  114. package/dist/shared-tree-core/editManagerSummarizer.d.ts +8 -3
  115. package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  116. package/dist/shared-tree-core/editManagerSummarizer.js +2 -5
  117. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  118. package/dist/shared-tree-core/sharedTreeCore.d.ts +18 -7
  119. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  120. package/dist/shared-tree-core/sharedTreeCore.js +15 -2
  121. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  122. package/dist/simple-tree/api/schemaCompatibilityTester.js +1 -1
  123. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  124. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
  125. package/dist/simple-tree/api/schemaCreationUtilities.js +3 -3
  126. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  127. package/dist/simple-tree/api/schemaFactory.d.ts +15 -11
  128. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  129. package/dist/simple-tree/api/schemaFactory.js +4 -0
  130. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  131. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +41 -11
  132. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  133. package/dist/simple-tree/api/schemaFactoryAlpha.js +31 -4
  134. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  135. package/dist/simple-tree/api/storedSchema.js +2 -2
  136. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  137. package/dist/simple-tree/api/treeChangeEvents.d.ts +8 -3
  138. package/dist/simple-tree/api/treeChangeEvents.d.ts.map +1 -1
  139. package/dist/simple-tree/api/treeChangeEvents.js.map +1 -1
  140. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  141. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +5 -0
  142. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  143. package/dist/simple-tree/core/treeNodeKernel.js +1 -1
  144. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  145. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +5 -9
  146. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  147. package/dist/simple-tree/core/unhydratedFlexTree.js +12 -31
  148. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  149. package/dist/simple-tree/index.d.ts +2 -2
  150. package/dist/simple-tree/index.d.ts.map +1 -1
  151. package/dist/simple-tree/index.js.map +1 -1
  152. package/dist/simple-tree/leafNodeSchema.d.ts +2 -0
  153. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  154. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  155. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +3 -1
  156. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  157. package/dist/simple-tree/node-kinds/array/arrayNode.js +3 -1
  158. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  159. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +3 -2
  160. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  161. package/dist/simple-tree/node-kinds/map/mapNode.js +4 -2
  162. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  163. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +3 -2
  164. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  165. package/dist/simple-tree/node-kinds/object/objectNode.js +3 -1
  166. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  167. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  168. package/dist/simple-tree/prepareForInsertion.js +5 -1
  169. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  170. package/dist/simple-tree/schemaTypes.d.ts +50 -3
  171. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  172. package/dist/simple-tree/schemaTypes.js +28 -1
  173. package/dist/simple-tree/schemaTypes.js.map +1 -1
  174. package/dist/simple-tree/simpleSchema.d.ts +22 -4
  175. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  176. package/dist/simple-tree/simpleSchema.js.map +1 -1
  177. package/dist/simple-tree/toStoredSchema.d.ts +2 -0
  178. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  179. package/dist/simple-tree/toStoredSchema.js +13 -4
  180. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  181. package/dist/tableSchema.d.ts +1 -1
  182. package/dist/util/typeUtils.d.ts +2 -2
  183. package/dist/util/typeUtils.js.map +1 -1
  184. package/dist/util/utils.d.ts +2 -0
  185. package/dist/util/utils.d.ts.map +1 -1
  186. package/dist/util/utils.js.map +1 -1
  187. package/lib/alpha.d.ts +11 -6
  188. package/lib/beta.d.ts +6 -1
  189. package/lib/core/index.d.ts +1 -1
  190. package/lib/core/index.d.ts.map +1 -1
  191. package/lib/core/index.js +1 -1
  192. package/lib/core/index.js.map +1 -1
  193. package/lib/core/schema-stored/formatV2.d.ts +80 -0
  194. package/lib/core/schema-stored/formatV2.d.ts.map +1 -0
  195. package/lib/core/schema-stored/formatV2.js +52 -0
  196. package/lib/core/schema-stored/formatV2.js.map +1 -0
  197. package/lib/core/schema-stored/index.d.ts +3 -1
  198. package/lib/core/schema-stored/index.d.ts.map +1 -1
  199. package/lib/core/schema-stored/index.js +3 -1
  200. package/lib/core/schema-stored/index.js.map +1 -1
  201. package/lib/core/schema-stored/schema.d.ts +49 -17
  202. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  203. package/lib/core/schema-stored/schema.js +63 -21
  204. package/lib/core/schema-stored/schema.js.map +1 -1
  205. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +9 -7
  206. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  207. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +11 -7
  208. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  209. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +3 -3
  210. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  211. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +7 -7
  212. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  213. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts +1 -1
  214. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  215. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +3 -3
  216. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  217. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +8 -3
  218. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  219. package/lib/feature-libraries/detachedFieldIndexSummarizer.js +2 -5
  220. package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  221. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +23 -24
  222. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  223. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  224. package/lib/feature-libraries/flex-tree/index.d.ts +0 -1
  225. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  226. package/lib/feature-libraries/flex-tree/index.js +0 -1
  227. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  228. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +2 -2
  229. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  230. package/lib/feature-libraries/flex-tree/lazyEntity.js +3 -0
  231. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  232. package/lib/feature-libraries/flex-tree/lazyField.d.ts +1 -2
  233. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  234. package/lib/feature-libraries/flex-tree/lazyField.js +3 -6
  235. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  236. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +5 -5
  237. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  238. package/lib/feature-libraries/flex-tree/lazyNode.js +15 -7
  239. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  240. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +8 -3
  241. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  242. package/lib/feature-libraries/forest-summary/forestSummarizer.js +2 -5
  243. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  244. package/lib/feature-libraries/index.d.ts +2 -2
  245. package/lib/feature-libraries/index.d.ts.map +1 -1
  246. package/lib/feature-libraries/index.js +1 -1
  247. package/lib/feature-libraries/index.js.map +1 -1
  248. package/lib/feature-libraries/mapTreeCursor.d.ts +16 -2
  249. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  250. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  251. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +1 -1
  252. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js +2 -0
  253. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
  254. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  255. package/lib/feature-libraries/object-forest/objectForest.js +2 -0
  256. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  257. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  258. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -4
  259. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  260. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -36
  261. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  262. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js +3 -3
  263. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  264. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  265. package/lib/feature-libraries/schema-index/codec.js +60 -10
  266. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  267. package/lib/feature-libraries/schema-index/formatV1.d.ts +1 -1
  268. package/lib/feature-libraries/schema-index/formatV2.d.ts +42 -0
  269. package/lib/feature-libraries/schema-index/formatV2.d.ts.map +1 -0
  270. package/lib/feature-libraries/schema-index/formatV2.js +23 -0
  271. package/lib/feature-libraries/schema-index/formatV2.js.map +1 -0
  272. package/lib/feature-libraries/schema-index/index.d.ts +2 -1
  273. package/lib/feature-libraries/schema-index/index.d.ts.map +1 -1
  274. package/lib/feature-libraries/schema-index/index.js +2 -1
  275. package/lib/feature-libraries/schema-index/index.js.map +1 -1
  276. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +7 -2
  277. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  278. package/lib/feature-libraries/schema-index/schemaSummarizer.js +6 -6
  279. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  280. package/lib/index.d.ts +2 -2
  281. package/lib/index.d.ts.map +1 -1
  282. package/lib/index.js.map +1 -1
  283. package/lib/packageVersion.d.ts +1 -1
  284. package/lib/packageVersion.d.ts.map +1 -1
  285. package/lib/packageVersion.js +1 -1
  286. package/lib/packageVersion.js.map +1 -1
  287. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  288. package/lib/shared-tree/schematizeTree.js +1 -0
  289. package/lib/shared-tree/schematizeTree.js.map +1 -1
  290. package/lib/shared-tree/sharedTree.d.ts +5 -1
  291. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  292. package/lib/shared-tree/sharedTree.js +34 -5
  293. package/lib/shared-tree/sharedTree.js.map +1 -1
  294. package/lib/shared-tree/treeAlpha.d.ts +1 -1
  295. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  296. package/lib/shared-tree/treeAlpha.js +3 -2
  297. package/lib/shared-tree/treeAlpha.js.map +1 -1
  298. package/lib/shared-tree-core/editManagerSummarizer.d.ts +8 -3
  299. package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  300. package/lib/shared-tree-core/editManagerSummarizer.js +2 -5
  301. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  302. package/lib/shared-tree-core/sharedTreeCore.d.ts +18 -7
  303. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  304. package/lib/shared-tree-core/sharedTreeCore.js +15 -2
  305. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  306. package/lib/simple-tree/api/schemaCompatibilityTester.js +1 -1
  307. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  308. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
  309. package/lib/simple-tree/api/schemaCreationUtilities.js +3 -3
  310. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  311. package/lib/simple-tree/api/schemaFactory.d.ts +15 -11
  312. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  313. package/lib/simple-tree/api/schemaFactory.js +4 -0
  314. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  315. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +41 -11
  316. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  317. package/lib/simple-tree/api/schemaFactoryAlpha.js +31 -4
  318. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  319. package/lib/simple-tree/api/storedSchema.js +2 -2
  320. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  321. package/lib/simple-tree/api/treeChangeEvents.d.ts +8 -3
  322. package/lib/simple-tree/api/treeChangeEvents.d.ts.map +1 -1
  323. package/lib/simple-tree/api/treeChangeEvents.js.map +1 -1
  324. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  325. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +5 -0
  326. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  327. package/lib/simple-tree/core/treeNodeKernel.js +1 -1
  328. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  329. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +5 -9
  330. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  331. package/lib/simple-tree/core/unhydratedFlexTree.js +15 -34
  332. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  333. package/lib/simple-tree/index.d.ts +2 -2
  334. package/lib/simple-tree/index.d.ts.map +1 -1
  335. package/lib/simple-tree/index.js.map +1 -1
  336. package/lib/simple-tree/leafNodeSchema.d.ts +2 -0
  337. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  338. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  339. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +3 -1
  340. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  341. package/lib/simple-tree/node-kinds/array/arrayNode.js +3 -1
  342. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  343. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +3 -2
  344. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  345. package/lib/simple-tree/node-kinds/map/mapNode.js +5 -3
  346. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  347. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +3 -2
  348. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  349. package/lib/simple-tree/node-kinds/object/objectNode.js +3 -1
  350. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  351. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  352. package/lib/simple-tree/prepareForInsertion.js +5 -1
  353. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  354. package/lib/simple-tree/schemaTypes.d.ts +50 -3
  355. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  356. package/lib/simple-tree/schemaTypes.js +28 -1
  357. package/lib/simple-tree/schemaTypes.js.map +1 -1
  358. package/lib/simple-tree/simpleSchema.d.ts +22 -4
  359. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  360. package/lib/simple-tree/simpleSchema.js.map +1 -1
  361. package/lib/simple-tree/toStoredSchema.d.ts +2 -0
  362. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  363. package/lib/simple-tree/toStoredSchema.js +13 -4
  364. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  365. package/lib/tableSchema.d.ts +1 -1
  366. package/lib/util/typeUtils.d.ts +2 -2
  367. package/lib/util/typeUtils.js.map +1 -1
  368. package/lib/util/utils.d.ts +2 -0
  369. package/lib/util/utils.d.ts.map +1 -1
  370. package/lib/util/utils.js.map +1 -1
  371. package/package.json +21 -21
  372. package/src/core/index.ts +3 -1
  373. package/src/core/schema-stored/formatV2.ts +78 -0
  374. package/src/core/schema-stored/index.ts +4 -1
  375. package/src/core/schema-stored/schema.ts +123 -33
  376. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +16 -11
  377. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +16 -7
  378. package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +4 -4
  379. package/src/feature-libraries/detachedFieldIndexSummarizer.ts +9 -16
  380. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +32 -29
  381. package/src/feature-libraries/flex-tree/index.ts +0 -8
  382. package/src/feature-libraries/flex-tree/lazyEntity.ts +5 -1
  383. package/src/feature-libraries/flex-tree/lazyField.ts +5 -8
  384. package/src/feature-libraries/flex-tree/lazyNode.ts +17 -8
  385. package/src/feature-libraries/forest-summary/forestSummarizer.ts +9 -16
  386. package/src/feature-libraries/index.ts +1 -1
  387. package/src/feature-libraries/mapTreeCursor.ts +17 -8
  388. package/src/feature-libraries/modular-schema/fieldKindWithEditor.ts +2 -0
  389. package/src/feature-libraries/object-forest/objectForest.ts +3 -0
  390. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +11 -6
  391. package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +3 -3
  392. package/src/feature-libraries/schema-index/codec.ts +73 -14
  393. package/src/feature-libraries/schema-index/formatV2.ts +30 -0
  394. package/src/feature-libraries/schema-index/index.ts +2 -1
  395. package/src/feature-libraries/schema-index/schemaSummarizer.ts +11 -18
  396. package/src/index.ts +5 -0
  397. package/src/packageVersion.ts +1 -1
  398. package/src/shared-tree/schematizeTree.ts +1 -0
  399. package/src/shared-tree/sharedTree.ts +42 -12
  400. package/src/shared-tree/treeAlpha.ts +8 -3
  401. package/src/shared-tree-core/editManagerSummarizer.ts +9 -16
  402. package/src/shared-tree-core/sharedTreeCore.ts +33 -24
  403. package/src/simple-tree/api/schemaCompatibilityTester.ts +1 -1
  404. package/src/simple-tree/api/schemaCreationUtilities.ts +3 -3
  405. package/src/simple-tree/api/schemaFactory.ts +16 -11
  406. package/src/simple-tree/api/schemaFactoryAlpha.ts +53 -8
  407. package/src/simple-tree/api/storedSchema.ts +4 -4
  408. package/src/simple-tree/api/treeChangeEvents.ts +8 -3
  409. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +5 -0
  410. package/src/simple-tree/core/treeNodeKernel.ts +1 -1
  411. package/src/simple-tree/core/unhydratedFlexTree.ts +22 -44
  412. package/src/simple-tree/index.ts +3 -0
  413. package/src/simple-tree/leafNodeSchema.ts +2 -0
  414. package/src/simple-tree/node-kinds/array/arrayNode.ts +5 -0
  415. package/src/simple-tree/node-kinds/map/mapNode.ts +11 -2
  416. package/src/simple-tree/node-kinds/object/objectNode.ts +9 -1
  417. package/src/simple-tree/prepareForInsertion.ts +5 -1
  418. package/src/simple-tree/schemaTypes.ts +96 -7
  419. package/src/simple-tree/simpleSchema.ts +27 -5
  420. package/src/simple-tree/toStoredSchema.ts +15 -4
  421. package/src/util/typeUtils.ts +2 -2
  422. package/src/util/utils.ts +2 -0
  423. package/dist/feature-libraries/flex-tree/navigation.d.ts +0 -46
  424. package/dist/feature-libraries/flex-tree/navigation.d.ts.map +0 -1
  425. package/dist/feature-libraries/flex-tree/navigation.js +0 -104
  426. package/dist/feature-libraries/flex-tree/navigation.js.map +0 -1
  427. package/lib/feature-libraries/flex-tree/navigation.d.ts +0 -46
  428. package/lib/feature-libraries/flex-tree/navigation.d.ts.map +0 -1
  429. package/lib/feature-libraries/flex-tree/navigation.js +0 -97
  430. package/lib/feature-libraries/flex-tree/navigation.js.map +0 -1
  431. package/src/feature-libraries/flex-tree/navigation.ts +0 -121
@@ -8,5 +8,5 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.pkgVersion = exports.pkgName = void 0;
10
10
  exports.pkgName = "@fluidframework/tree";
11
- exports.pkgVersion = "2.42.0";
11
+ exports.pkgVersion = "2.43.0-343119";
12
12
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,sBAAsB,CAAC;AACjC,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/tree\";\nexport const pkgVersion = \"2.42.0\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,sBAAsB,CAAC;AACjC,QAAA,UAAU,GAAG,eAAe,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/tree\";\nexport const pkgVersion = \"2.43.0-343119\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schematizeTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/schematizeTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAEN,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAGrB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGzE,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,gBAAgB,IAAA;IAChB;;OAEG;IACH,YAAY,IAAA;CACZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,UAAU,EAAE,yBAAyB,EACrC,QAAQ,EAAE,aAAa,GACrB,UAAU,CAiBZ;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,CAgCxF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC3B,UAAU,EAAE,yBAAyB,EACrC,QAAQ,EAAE,aAAa,GACrB,OAAO,CAiBT;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"}
1
+ {"version":3,"file":"schematizeTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/schematizeTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAEN,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAGrB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGzE,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,CAgDN;AAED,oBAAY,UAAU;IACrB;;OAEG;IACH,IAAI,IAAA;IACJ;;OAEG;IACH,gBAAgB,IAAA;IAChB;;OAEG;IACH,YAAY,IAAA;CACZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,UAAU,EAAE,yBAAyB,EACrC,QAAQ,EAAE,aAAa,GACrB,UAAU,CAiBZ;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,CAgCxF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC3B,UAAU,EAAE,yBAAyB,EACrC,QAAQ,EAAE,aAAa,GACrB,OAAO,CAiBT;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"}
@@ -40,6 +40,7 @@ function initializeContent(schemaRepository, newSchema, setInitialTree) {
40
40
  rootFieldSchema: {
41
41
  kind: index_js_2.FieldKinds.optional.identifier,
42
42
  types: rootSchema.types,
43
+ persistedMetadata: rootSchema.persistedMetadata,
43
44
  },
44
45
  };
45
46
  }
@@ -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, fail } from \"@fluidframework/core-utils/internal\";\n\nimport {\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 type { SchemaCompatibilityTester } from \"../simple-tree/index.js\";\nimport { 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 * 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\n/**\n * Returns how compatible updating checkout's schema is with the viewSchema.\n */\nexport function evaluateUpdate(\n\tviewSchema: SchemaCompatibilityTester,\n\tcheckout: ITreeCheckout,\n): UpdateType {\n\tconst compatibility = viewSchema.checkCompatibility(checkout.storedSchema);\n\n\tif (compatibility.canUpgrade && compatibility.canView) {\n\t\t// Compatible as is\n\t\treturn UpdateType.None;\n\t}\n\n\tif (!compatibility.canUpgrade) {\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.canView, 0x8bd /* unexpected case */);\n\tassert(compatibility.canUpgrade, 0x8be /* unexpected case */);\n\n\treturn UpdateType.SchemaCompatible;\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 empty 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\t\t\tconst contentChunk = checkout.forest.chunkField(content);\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(contentChunk.topLevelLength === 0 ? undefined : contentChunk, 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, contentChunk);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tfail(0xac7 /* 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 SchemaCompatibilityTester}.\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: SchemaCompatibilityTester,\n\tcheckout: ITreeCheckout,\n): boolean {\n\tconst updatedNeeded = evaluateUpdate(viewSchema, 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.viewSchemaAsStored);\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"]}
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, fail } from \"@fluidframework/core-utils/internal\";\n\nimport {\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 type { SchemaCompatibilityTester } from \"../simple-tree/index.js\";\nimport { 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\tpersistedMetadata: rootSchema.persistedMetadata,\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 * 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\n/**\n * Returns how compatible updating checkout's schema is with the viewSchema.\n */\nexport function evaluateUpdate(\n\tviewSchema: SchemaCompatibilityTester,\n\tcheckout: ITreeCheckout,\n): UpdateType {\n\tconst compatibility = viewSchema.checkCompatibility(checkout.storedSchema);\n\n\tif (compatibility.canUpgrade && compatibility.canView) {\n\t\t// Compatible as is\n\t\treturn UpdateType.None;\n\t}\n\n\tif (!compatibility.canUpgrade) {\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.canView, 0x8bd /* unexpected case */);\n\tassert(compatibility.canUpgrade, 0x8be /* unexpected case */);\n\n\treturn UpdateType.SchemaCompatible;\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 empty 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\t\t\tconst contentChunk = checkout.forest.chunkField(content);\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(contentChunk.topLevelLength === 0 ? undefined : contentChunk, 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, contentChunk);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tfail(0xac7 /* 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 SchemaCompatibilityTester}.\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: SchemaCompatibilityTester,\n\tcheckout: ITreeCheckout,\n): boolean {\n\tconst updatedNeeded = evaluateUpdate(viewSchema, 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.viewSchemaAsStored);\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"]}
@@ -12,11 +12,11 @@ import { type GraphCommit, type IEditableForest, type JsonableTree, type TreeSto
12
12
  import { TreeCompressionStrategy } from "../feature-libraries/index.js";
13
13
  import { type ClonableSchemaAndPolicy, SharedTreeCore } from "../shared-tree-core/index.js";
14
14
  import { type ITree, type ImplicitFieldSchema, type ReadSchema, type SimpleTreeSchema, type TreeView, type TreeViewAlpha, type TreeViewConfiguration, type UnsafeUnknownSchema, type VerboseTree, type ITreeAlpha } from "../simple-tree/index.js";
15
- import { type Breakable, type JsonCompatible } from "../util/index.js";
16
15
  import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
17
16
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
18
17
  import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
19
18
  import { type TreeCheckout, type BranchableTree } from "./treeCheckout.js";
19
+ import { type Breakable, type JsonCompatible } from "../util/index.js";
20
20
  /**
21
21
  * Copy of data from an {@link ITreePrivate} at some point in time.
22
22
  * @remarks
@@ -153,6 +153,10 @@ export declare const SharedTreeFormatVersion: {
153
153
  * Requires \@fluidframework/tree \>= 2.0.0.
154
154
  */
155
155
  readonly v3: 3;
156
+ /**
157
+ * Requires \@fluidframework/tree \>= 2.0.0.
158
+ */
159
+ readonly v5: 5;
156
160
  };
157
161
  /**
158
162
  * Format versions supported by SharedTree.
@@ -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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"}
@@ -50,11 +50,11 @@ const index_js_2 = require("../core/index.js");
50
50
  const index_js_3 = require("../feature-libraries/index.js");
51
51
  const index_js_4 = require("../shared-tree-core/index.js");
52
52
  const index_js_5 = require("../simple-tree/index.js");
53
- const index_js_6 = require("../util/index.js");
54
53
  const schematizingTreeView_js_1 = require("./schematizingTreeView.js");
55
54
  const sharedTreeChangeEnricher_js_1 = require("./sharedTreeChangeEnricher.js");
56
55
  const sharedTreeChangeFamily_js_1 = require("./sharedTreeChangeFamily.js");
57
56
  const treeCheckout_js_1 = require("./treeCheckout.js");
57
+ const index_js_6 = require("../util/index.js");
58
58
  const formatVersionToTopLevelCodecVersions = new Map([
59
59
  [
60
60
  1,
@@ -72,6 +72,10 @@ const formatVersionToTopLevelCodecVersions = new Map([
72
72
  4,
73
73
  { forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },
74
74
  ],
75
+ [
76
+ 5,
77
+ { forest: 1, schema: 2, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },
78
+ ],
75
79
  ]);
76
80
  function getCodecVersions(formatVersion) {
77
81
  const versions = formatVersionToTopLevelCodecVersions.get(formatVersion);
@@ -326,6 +330,10 @@ exports.SharedTreeFormatVersion = {
326
330
  * Requires \@fluidframework/tree \>= 2.0.0.
327
331
  */
328
332
  v3: 3,
333
+ /**
334
+ * Requires \@fluidframework/tree \>= 2.0.0.
335
+ */
336
+ v5: 5,
329
337
  };
330
338
  /**
331
339
  * Reference implementation of forest.
@@ -404,19 +412,34 @@ function exportSimpleFieldSchemaStored(schema) {
404
412
  default:
405
413
  (0, internal_1.fail)(0xaca /* invalid field kind */);
406
414
  }
407
- return { kind, allowedTypesIdentifiers: schema.types, metadata: {} };
415
+ return {
416
+ kind,
417
+ allowedTypesIdentifiers: schema.types,
418
+ metadata: {},
419
+ persistedMetadata: schema.persistedMetadata,
420
+ };
408
421
  }
422
+ /**
423
+ * Export a {@link SimpleNodeSchema} from a {@link TreeNodeStoredSchema}.
424
+ * @privateRemarks
425
+ * TODO: Persist node metadata once schema FormatV2 is supported.
426
+ */
409
427
  function exportSimpleNodeSchemaStored(schema) {
410
428
  const arrayTypes = (0, index_js_5.tryStoredSchemaAsArray)(schema);
411
429
  if (arrayTypes !== undefined) {
412
- return { kind: index_js_5.NodeKind.Array, allowedTypesIdentifiers: arrayTypes, metadata: {} };
430
+ return {
431
+ kind: index_js_5.NodeKind.Array,
432
+ allowedTypesIdentifiers: arrayTypes,
433
+ metadata: {},
434
+ persistedMetadata: schema.metadata,
435
+ };
413
436
  }
414
437
  if (schema instanceof index_js_2.ObjectNodeStoredSchema) {
415
438
  const fields = new Map();
416
439
  for (const [storedKey, field] of schema.objectNodeFields) {
417
440
  fields.set(storedKey, { ...exportSimpleFieldSchemaStored(field), storedKey });
418
441
  }
419
- return { kind: index_js_5.NodeKind.Object, fields, metadata: {} };
442
+ return { kind: index_js_5.NodeKind.Object, fields, metadata: {}, persistedMetadata: schema.metadata };
420
443
  }
421
444
  if (schema instanceof index_js_2.MapNodeStoredSchema) {
422
445
  (0, internal_1.assert)(schema.mapFields.kind === index_js_3.FieldKinds.optional.identifier, 0xa95 /* Invalid map schema */);
@@ -424,10 +447,16 @@ function exportSimpleNodeSchemaStored(schema) {
424
447
  kind: index_js_5.NodeKind.Map,
425
448
  allowedTypesIdentifiers: schema.mapFields.types,
426
449
  metadata: {},
450
+ persistedMetadata: schema.metadata,
427
451
  };
428
452
  }
429
453
  if (schema instanceof index_js_2.LeafNodeStoredSchema) {
430
- return { kind: index_js_5.NodeKind.Leaf, leafKind: schema.leafValue, metadata: {} };
454
+ return {
455
+ kind: index_js_5.NodeKind.Leaf,
456
+ leafKind: schema.leafValue,
457
+ metadata: {},
458
+ persistedMetadata: schema.metadata,
459
+ };
431
460
  }
432
461
  (0, internal_1.fail)(0xacb /* invalid schema kind */);
433
462
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sharedTree.js","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.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 type {\n\tErasedType,\n\tIFluidHandle,\n\tIFluidLoadable,\n} from \"@fluidframework/core-interfaces/internal\";\nimport { assert, fail } from \"@fluidframework/core-utils/internal\";\nimport type { IChannelStorageService } from \"@fluidframework/datastore-definitions/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type {\n\tIChannelView,\n\tIFluidSerializer,\n\tSharedKernel,\n} from \"@fluidframework/shared-object-base/internal\";\nimport {\n\tUsageError,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport {\n\ttype CodecWriteOptions,\n\tFluidClientVersion,\n\ttype ICodecOptions,\n\tnoopValidator,\n} from \"../codec/index.js\";\nimport {\n\ttype FieldKey,\n\ttype GraphCommit,\n\ttype IEditableForest,\n\ttype ITreeCursor,\n\ttype JsonableTree,\n\tLeafNodeStoredSchema,\n\tMapNodeStoredSchema,\n\tObjectNodeStoredSchema,\n\tRevisionTagCodec,\n\tSchemaVersion,\n\ttype TaggedChange,\n\ttype TreeFieldStoredSchema,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeNodeStoredSchema,\n\ttype TreeStoredSchema,\n\tTreeStoredSchemaRepository,\n\ttype TreeStoredSchemaSubscription,\n\tmakeDetachedFieldIndex,\n\tmoveToDetachedField,\n} from \"../core/index.js\";\nimport {\n\tDetachedFieldIndexSummarizer,\n\tFieldKinds,\n\tForestSummarizer,\n\tSchemaSummarizer,\n\tTreeCompressionStrategy,\n\tbuildChunkedForest,\n\tbuildForest,\n\tdefaultSchemaPolicy,\n\tjsonableTreeFromFieldCursor,\n\tmakeFieldBatchCodec,\n\tmakeMitigatedChangeFamily,\n\tmakeSchemaCodec,\n\tmakeTreeChunker,\n} from \"../feature-libraries/index.js\";\n// eslint-disable-next-line import/no-internal-modules\nimport type { Format } from \"../feature-libraries/schema-index/index.js\";\nimport {\n\ttype ClonableSchemaAndPolicy,\n\tDefaultResubmitMachine,\n\ttype ExplicitCoreCodecVersions,\n\tSharedTreeCore,\n} from \"../shared-tree-core/index.js\";\nimport {\n\ttype ITree,\n\ttype ImplicitFieldSchema,\n\tNodeKind,\n\ttype ReadSchema,\n\ttype SimpleFieldSchema,\n\ttype SimpleTreeSchema,\n\ttype TreeView,\n\ttype TreeViewAlpha,\n\ttype TreeViewConfiguration,\n\ttype UnsafeUnknownSchema,\n\ttype VerboseTree,\n\ttryStoredSchemaAsArray,\n\ttype SimpleNodeSchema,\n\tcustomFromCursorStored,\n\tFieldKind,\n\ttype CustomTreeNode,\n\ttype CustomTreeValue,\n\ttype ITreeAlpha,\n\ttype SimpleObjectFieldSchema,\n} from \"../simple-tree/index.js\";\nimport {\n\ttype Breakable,\n\tbreakingClass,\n\ttype JsonCompatible,\n\tthrowIfBroken,\n} from \"../util/index.js\";\n\nimport { SchematizingSimpleTreeView } from \"./schematizingTreeView.js\";\nimport { SharedTreeReadonlyChangeEnricher } from \"./sharedTreeChangeEnricher.js\";\nimport { SharedTreeChangeFamily } from \"./sharedTreeChangeFamily.js\";\nimport type { SharedTreeChange } from \"./sharedTreeChangeTypes.js\";\nimport type { SharedTreeEditBuilder } from \"./sharedTreeEditBuilder.js\";\nimport { type TreeCheckout, type BranchableTree, createTreeCheckout } from \"./treeCheckout.js\";\n\n/**\n * Copy of data from an {@link ITreePrivate} at some point in time.\n * @remarks\n * This is unrelated to Fluids concept of \"snapshots\".\n */\nexport interface SharedTreeContentSnapshot {\n\t/**\n\t * The schema stored in the document.\n\t *\n\t * @remarks\n\t * Edits to the schema can mutate the schema stored of the tree which took this snapshot (but this snapshot will remain the same)\n\t * This is mainly useful for debugging cases where schematize reports an incompatible view schema.\n\t */\n\treadonly schema: TreeStoredSchema;\n\t/**\n\t * All {@link TreeStatus.InDocument} content.\n\t */\n\treadonly tree: JsonableTree[];\n\t/**\n\t * All {@link TreeStatus.Removed} content.\n\t */\n\treadonly removed: [string | number | undefined, number, JsonableTree][];\n}\n\n/**\n * {@link ITree} extended with some non-public APIs.\n * @internal\n */\nexport interface ITreeInternal extends IChannelView, ITreeAlpha {}\n\n/**\n * {@link ITreeInternal} extended with some non-exported APIs.\n * @remarks\n * This allows access to the tree content using the internal data model used at the storage and \"flex\" layers,\n * and should only be needed for testing and debugging this package's internals.\n */\nexport interface ITreePrivate extends ITreeInternal {\n\t/**\n\t * Provides a copy of the current content of the tree.\n\t * This can be useful for inspecting the tree when no suitable view schema is available.\n\t * This is only intended for use in testing and exceptional code paths: it is not performant.\n\t *\n\t * This does not include everything that is included in a tree summary, since information about how to merge future edits is omitted.\n\t */\n\tcontentSnapshot(): SharedTreeContentSnapshot;\n\n\t/**\n\t * Access to internals for testing.\n\t */\n\treadonly kernel: SharedTreeKernel;\n}\n\n/**\n * Has an entry for each codec which writes an explicit version into its data.\n *\n * This is used to map the single API entrypoint controlling the format {@link SharedTreeOptions.formatVersion}\n * to a list of write versions that for each codec that should be used for that format.\n *\n * Note that all explicitly versioned codecs should be using the format version from the data to read encoded data.\n *\n * TODO: Plumb these write versions into forest, schema, detached field index codec creation.\n */\ninterface ExplicitCodecVersions extends ExplicitCoreCodecVersions {\n\tforest: number;\n\tschema: SchemaVersion;\n\tdetachedFieldIndex: number;\n\tfieldBatch: number;\n}\n\nconst formatVersionToTopLevelCodecVersions = new Map<number, ExplicitCodecVersions>([\n\t[\n\t\t1,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 1, message: 1, fieldBatch: 1 },\n\t],\n\t[\n\t\t2,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 2, message: 2, fieldBatch: 1 },\n\t],\n\t[\n\t\t3,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 3, message: 3, fieldBatch: 1 },\n\t],\n\t[\n\t\t4,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },\n\t],\n]);\n\nfunction getCodecVersions(formatVersion: number): ExplicitCodecVersions {\n\tconst versions = formatVersionToTopLevelCodecVersions.get(formatVersion);\n\tassert(versions !== undefined, 0x90e /* Unknown format version */);\n\treturn versions;\n}\n\n/**\n * The type SharedTree's kernel's view must implement so what when its merged with the underling SharedObject's API it fully implements the required tree API surface ({@link ITreePrivate }).\n */\nexport type SharedTreeKernelView = Omit<ITreePrivate, keyof (IChannelView & IFluidLoadable)>;\n\n/**\n * SharedTreeCore, configured with a good set of indexes and field kinds which will maintain compatibility over time.\n *\n * TODO: detail compatibility requirements.\n */\n@breakingClass\nexport class SharedTreeKernel\n\textends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>\n\timplements SharedKernel\n{\n\tpublic readonly checkout: TreeCheckout;\n\tpublic get storedSchema(): TreeStoredSchemaRepository {\n\t\treturn this.checkout.storedSchema;\n\t}\n\n\t/**\n\t * The app-facing API for SharedTree implemented by this Kernel.\n\t * @remarks\n\t * This is the API grafted onto the ISharedObject which apps can access.\n\t * It includes both the APIs used for internal testing, and public facing APIs (both stable and unstable).\n\t * Different users will have access to different subsets of this API, see {@link ITree}, {@link ITreeAlpha} and {@link ITreeInternal} which this {@link ITreePrivate} extends.\n\t */\n\tpublic readonly view: SharedTreeKernelView;\n\n\tpublic constructor(\n\t\tbreaker: Breakable,\n\t\tsharedObject: IChannelView & IFluidLoadable,\n\t\tserializer: IFluidSerializer,\n\t\tsubmitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void,\n\t\tlastSequenceNumber: () => number | undefined,\n\t\tlogger: ITelemetryLoggerExt | undefined,\n\t\tidCompressor: IIdCompressor,\n\t\toptionsParam: SharedTreeOptionsInternal,\n\t) {\n\t\tconst options = { ...defaultSharedTreeOptions, ...optionsParam };\n\t\tconst codecVersions = getCodecVersions(options.formatVersion);\n\t\tconst schema = new TreeStoredSchemaRepository();\n\t\tconst forest = buildConfiguredForest(breaker, options.forest, schema, idCompressor);\n\t\tconst revisionTagCodec = new RevisionTagCodec(idCompressor);\n\t\tconst removedRoots = makeDetachedFieldIndex(\n\t\t\t\"repair\",\n\t\t\trevisionTagCodec,\n\t\t\tidCompressor,\n\t\t\toptions,\n\t\t);\n\t\tconst schemaCodec = makeSchemaCodec(options, codecVersions.schema);\n\t\tconst schemaSummarizer = new SchemaSummarizer(\n\t\t\tschema,\n\t\t\t{\n\t\t\t\tgetCurrentSeq: lastSequenceNumber,\n\t\t\t},\n\t\t\tschemaCodec,\n\t\t);\n\t\tconst fieldBatchCodec = makeFieldBatchCodec(options, codecVersions.fieldBatch);\n\n\t\tconst encoderContext = {\n\t\t\tschema: {\n\t\t\t\tschema,\n\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t},\n\t\t\tencodeType: options.treeEncodeType,\n\t\t\toriginatorId: idCompressor.localSessionId,\n\t\t\tidCompressor,\n\t\t};\n\t\tconst forestSummarizer = new ForestSummarizer(\n\t\t\tforest,\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\tencoderContext,\n\t\t\toptions,\n\t\t\tidCompressor,\n\t\t);\n\t\tconst removedRootsSummarizer = new DetachedFieldIndexSummarizer(removedRoots);\n\t\tconst innerChangeFamily = new SharedTreeChangeFamily(\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\toptions,\n\t\t\toptions.treeEncodeType,\n\t\t\tidCompressor,\n\t\t);\n\t\tconst changeFamily = makeMitigatedChangeFamily(\n\t\t\tinnerChangeFamily,\n\t\t\tSharedTreeChangeFamily.emptyChange,\n\t\t\t(error: unknown) => {\n\t\t\t\t// TODO:6344 Add telemetry for these errors.\n\t\t\t\t// Rethrowing the error has a different effect depending on the context in which the\n\t\t\t\t// ChangeFamily was invoked:\n\t\t\t\t// - If the ChangeFamily was invoked as part of incoming op processing, rethrowing the error\n\t\t\t\t// will cause the runtime to disconnect the client, log a severe error, and not reconnect.\n\t\t\t\t// This will not cause the host application to crash because it is not on the stack at that time.\n\t\t\t\t// TODO: let the host application know that the client is now disconnected.\n\t\t\t\t// - If the ChangeFamily was invoked as part of dealing with a local change, rethrowing the\n\t\t\t\t// error will cause the host application to crash. This is not ideal, but is better than\n\t\t\t\t// letting the application either send an invalid change to the server or allowing the\n\t\t\t\t// application to continue working when its local branches contain edits that cannot be\n\t\t\t\t// reflected in its views.\n\t\t\t\t// The best course of action for a host application in such a state is to restart.\n\t\t\t\t// TODO: let the host application know about this situation and provide a way to\n\t\t\t\t// programmatically reload the SharedTree container.\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tconst changeEnricher = new SharedTreeReadonlyChangeEnricher(forest, schema, removedRoots);\n\t\tsuper(\n\t\t\tbreaker,\n\t\t\tsharedObject,\n\t\t\tserializer,\n\t\t\tsubmitLocalMessage,\n\t\t\tlogger,\n\t\t\t[schemaSummarizer, forestSummarizer, removedRootsSummarizer],\n\t\t\tchangeFamily,\n\t\t\toptions,\n\t\t\tcodecVersions,\n\t\t\tidCompressor,\n\t\t\tschema,\n\t\t\tdefaultSchemaPolicy,\n\t\t\tnew DefaultResubmitMachine(\n\t\t\t\t(change: TaggedChange<SharedTreeChange>) =>\n\t\t\t\t\tchangeFamily.rebaser.invert(change, true, this.mintRevisionTag()),\n\t\t\t\tchangeEnricher,\n\t\t\t),\n\t\t\tchangeEnricher,\n\t\t);\n\t\tconst localBranch = this.getLocalBranch();\n\t\tthis.checkout = createTreeCheckout(idCompressor, this.mintRevisionTag, revisionTagCodec, {\n\t\t\tbranch: localBranch,\n\t\t\tchangeFamily,\n\t\t\tschema,\n\t\t\tforest,\n\t\t\tfieldBatchCodec,\n\t\t\tremovedRoots,\n\t\t\tchunkCompressionStrategy: options.treeEncodeType,\n\t\t\tlogger,\n\t\t\tbreaker: this.breaker,\n\t\t\tdisposeForksAfterTransaction: options.disposeForksAfterTransaction,\n\t\t});\n\n\t\tthis.checkout.transaction.events.on(\"started\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.startTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.transaction.events.on(\"aborting\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.abortTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.transaction.events.on(\"committing\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.commitTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.events.on(\"beforeBatch\", (event) => {\n\t\t\tif (event.type === \"append\" && sharedObject.isAttached()) {\n\t\t\t\tif (this.checkout.transaction.isInProgress()) {\n\t\t\t\t\tthis.commitEnricher.addTransactionCommits(event.newCommits);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.view = {\n\t\t\tcontentSnapshot: () => this.contentSnapshot(),\n\t\t\texportSimpleSchema: () => this.exportSimpleSchema(),\n\t\t\texportVerbose: () => this.exportVerbose(),\n\t\t\tviewWith: this.viewWith.bind(this),\n\t\t\tkernel: this,\n\t\t};\n\t}\n\n\tpublic exportVerbose(): VerboseTree | undefined {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\tconst length = cursor.getFieldLength();\n\t\t\tif (length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t} else if (length === 1) {\n\t\t\t\tcursor.enterNode(0);\n\t\t\t\treturn verboseFromCursor(cursor, this.storedSchema.nodeSchema);\n\t\t\t} else {\n\t\t\t\tfail(0xac8 /* Invalid document root length */);\n\t\t\t}\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\tpublic exportSimpleSchema(): SimpleTreeSchema {\n\t\treturn exportSimpleSchema(this.storedSchema);\n\t}\n\n\t@throwIfBroken\n\tpublic contentSnapshot(): SharedTreeContentSnapshot {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\treturn {\n\t\t\t\tschema: this.storedSchema.clone(),\n\t\t\t\ttree: jsonableTreeFromFieldCursor(cursor),\n\t\t\t\tremoved: this.checkout.getRemovedRoots(),\n\t\t\t};\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\t// For the new TreeViewAlpha API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>>;\n\n\t// For the old TreeView API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<TRoot>;\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>> {\n\t\treturn this.checkout.viewWith(config) as SchematizingSimpleTreeView<TRoot> &\n\t\t\tTreeView<ReadSchema<TRoot>>;\n\t}\n\n\tpublic override async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tawait super.loadCore(services);\n\t\tthis.checkout.load();\n\t}\n\n\tpublic override didAttach(): void {\n\t\tif (this.checkout.transaction.isInProgress()) {\n\t\t\t// Attaching during a transaction is not currently supported.\n\t\t\t// At least part of of the system is known to not handle this case correctly - commit enrichment - and there may be others.\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Cannot attach while a transaction is in progress. Commit or abort the transaction before attaching.\",\n\t\t\t);\n\t\t}\n\t\tsuper.didAttach();\n\t}\n\n\tpublic override applyStashedOp(\n\t\t...args: Parameters<\n\t\t\tSharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>[\"applyStashedOp\"]\n\t\t>\n\t): void {\n\t\tassert(\n\t\t\t!this.checkout.transaction.isInProgress(),\n\t\t\t0x674 /* Unexpected transaction is open while applying stashed ops */,\n\t\t);\n\t\tsuper.applyStashedOp(...args);\n\t}\n\n\tprotected override submitCommit(\n\t\tcommit: GraphCommit<SharedTreeChange>,\n\t\tschemaAndPolicy: ClonableSchemaAndPolicy,\n\t\tisResubmit: boolean,\n\t): void {\n\t\tassert(\n\t\t\t!this.checkout.transaction.isInProgress(),\n\t\t\t0xaa6 /* Cannot submit a commit while a transaction is in progress */,\n\t\t);\n\t\tif (isResubmit) {\n\t\t\treturn super.submitCommit(commit, schemaAndPolicy, isResubmit);\n\t\t}\n\n\t\t// Refrain from submitting new commits until they are validated by the checkout.\n\t\t// This is not a strict requirement for correctness in our system, but in the event that there is a bug when applying commits to the checkout\n\t\t// that causes a crash (e.g. in the forest), this will at least prevent this client from sending the problematic commit to any other clients.\n\t\tthis.checkout.onCommitValid(commit, () =>\n\t\t\tsuper.submitCommit(commit, schemaAndPolicy, isResubmit),\n\t\t);\n\t}\n\n\tpublic onDisconnect(): void {}\n}\n\nexport function exportSimpleSchema(storedSchema: TreeStoredSchema): SimpleTreeSchema {\n\treturn {\n\t\troot: exportSimpleFieldSchemaStored(storedSchema.rootFieldSchema),\n\t\tdefinitions: new Map(\n\t\t\t[...storedSchema.nodeSchema].map(([key, schema]) => {\n\t\t\t\treturn [key, exportSimpleNodeSchemaStored(schema)];\n\t\t\t}),\n\t\t),\n\t};\n}\n\n/**\n * A way to parse schema in the persisted format from {@link extractPersistedSchema}.\n * @remarks\n * This behaves identically to {@link ITreeAlpha.exportSimpleSchema},\n * except that it gets the schema from the caller instead of from an existing tree.\n *\n * This can be useful for inspecting the contents of persisted schema,\n * such as those generated by {@link extractPersistedSchema} for use in testing.\n * Since that data format is otherwise unspecified,\n * this provides a way to inspect its contents with documented semantics.\n * @alpha\n */\nexport function persistedToSimpleSchema(\n\tpersisted: JsonCompatible,\n\toptions: ICodecOptions,\n): SimpleTreeSchema {\n\tconst schemaCodec = makeSchemaCodec(options, SchemaVersion.v1);\n\tconst stored = schemaCodec.decode(persisted as Format);\n\treturn exportSimpleSchema(stored);\n}\n\n/**\n * Get a {@link BranchableTree} from a {@link ITree}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n * @deprecated This API is superseded by {@link TreeBranch}, which should be used instead.\n */\nexport function getBranch(tree: ITree): BranchableTree;\n/**\n * Get a {@link BranchableTree} from a {@link TreeView}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * Branches are currently an unstable \"alpha\" API and are subject to change in the future.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n * @deprecated This API is superseded by {@link TreeBranch}, which should be used instead.\n */\nexport function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\tview: TreeViewAlpha<T>,\n): BranchableTree;\nexport function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\ttreeOrView: ITree | TreeViewAlpha<T>,\n): BranchableTree {\n\tif (treeOrView instanceof SchematizingSimpleTreeView) {\n\t\treturn treeOrView.checkout as unknown as BranchableTree;\n\t}\n\tconst kernel = (treeOrView as ITree as ITreePrivate).kernel;\n\tassert(kernel instanceof SharedTreeKernel, 0xb56 /* Invalid ITree */);\n\t// This cast is safe so long as TreeCheckout supports all the operations on the branch interface.\n\treturn kernel.checkout as unknown as BranchableTree;\n}\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n */\nexport const SharedTreeFormatVersion = {\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t *\n\t * @deprecated - FF does not currently plan on supporting this format long-term.\n\t * Do not write production documents using this format, as they may not be loadable in the future.\n\t */\n\tv1: 1,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv2: 2,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv3: 3,\n} as const;\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n * @privateRemarks\n * See packages/dds/tree/docs/main/compatibility.md for information on how to add support for a new format.\n *\n * TODO: Before this gets promoted past Alpha,\n * a separate abstraction more suited for use in the public API should be adopted rather than reusing the same types used internally.\n * Such an abstraction should probably be in the form of a Fluid-Framework wide compatibility enum.\n */\nexport type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;\n\n/**\n * Configuration options for SharedTree.\n * @alpha @input\n */\nexport type SharedTreeOptions = Partial<CodecWriteOptions> &\n\tPartial<SharedTreeFormatOptions> &\n\tForestOptions;\n\nexport interface SharedTreeOptionsInternal extends SharedTreeOptions {\n\tdisposeForksAfterTransaction?: boolean;\n}\n/**\n * Configuration options for SharedTree's internal tree storage.\n * @alpha\n */\nexport interface ForestOptions {\n\t/**\n\t * The {@link ForestType} indicating which forest type should be created for the SharedTree.\n\t */\n\treadonly forest?: ForestType;\n}\n\n/**\n * Options for configuring the persisted format SharedTree uses.\n * @alpha\n */\nexport interface SharedTreeFormatOptions {\n\t/**\n\t * See {@link TreeCompressionStrategy}.\n\t * default: TreeCompressionStrategy.Compressed\n\t */\n\ttreeEncodeType: TreeCompressionStrategy;\n\t/**\n\t * The format version SharedTree should use to persist documents.\n\t *\n\t * This option has compatibility implications for applications using SharedTree.\n\t * Each version documents a required minimum version of \\@fluidframework/tree.\n\t * If this minimum version fails to be met, the SharedTree may fail to load.\n\t * To be safe, application authors should verify that they have saturated this version\n\t * of \\@fluidframework/tree in their ecosystem before changing the format version.\n\t *\n\t * This option defaults to SharedTreeFormatVersion.v2.\n\t */\n\tformatVersion: SharedTreeFormatVersion[keyof SharedTreeFormatVersion];\n}\n\n/**\n * Used to distinguish between different forest types.\n * @remarks\n * Current options are {@link ForestTypeReference}, {@link ForestTypeOptimized} and {@link ForestTypeExpensiveDebug}.\n * @sealed @alpha\n */\nexport interface ForestType extends ErasedType<\"ForestType\"> {}\n\n/**\n * Reference implementation of forest.\n * @remarks\n * A simple implementation with minimal complexity and moderate debuggability, validation and performance.\n * @privateRemarks\n * The \"ObjectForest\" forest type.\n * @alpha\n */\nexport const ForestTypeReference = toForestType(\n\t(breaker: Breakable, schema: TreeStoredSchemaSubscription, idCompressor: IIdCompressor) =>\n\t\tbuildForest(breaker, schema),\n);\n\n/**\n * Optimized implementation of forest.\n * @remarks\n * A complex optimized forest implementation, which has minimal validation and debuggability to optimize for performance.\n * Uses an internal representation optimized for size designed to scale to larger datasets with reduced overhead.\n * @privateRemarks\n * The \"ChunkedForest\" forest type.\n * @alpha\n */\nexport const ForestTypeOptimized = toForestType(\n\t(breaker: Breakable, schema: TreeStoredSchemaSubscription, idCompressor: IIdCompressor) =>\n\t\tbuildChunkedForest(makeTreeChunker(schema, defaultSchemaPolicy), undefined, idCompressor),\n);\n\n/**\n * Slow implementation of forest intended only for debugging.\n * @remarks\n * Includes validation with scales poorly.\n * May be asymptotically slower than {@link ForestTypeReference}, and may perform very badly with larger data sizes.\n * @privateRemarks\n * The \"ObjectForest\" forest type with expensive asserts for debugging.\n * @alpha\n */\nexport const ForestTypeExpensiveDebug = toForestType(\n\t(breaker: Breakable, schema: TreeStoredSchemaSubscription) =>\n\t\tbuildForest(breaker, schema, undefined, true),\n);\n\ntype ForestFactory = (\n\tbreaker: Breakable,\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n) => IEditableForest;\n\nfunction toForestType(factory: ForestFactory): ForestType {\n\treturn factory as unknown as ForestType;\n}\n\n/**\n * Build and return a forest of the requested type.\n */\nexport function buildConfiguredForest(\n\tbreaker: Breakable,\n\tfactory: ForestType,\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n): IEditableForest {\n\treturn (factory as unknown as ForestFactory)(breaker, schema, idCompressor);\n}\n\nexport const defaultSharedTreeOptions: Required<SharedTreeOptionsInternal> = {\n\tjsonValidator: noopValidator,\n\toldestCompatibleClient: FluidClientVersion.v2_0,\n\tforest: ForestTypeReference,\n\ttreeEncodeType: TreeCompressionStrategy.Compressed,\n\tformatVersion: SharedTreeFormatVersion.v3,\n\tdisposeForksAfterTransaction: true,\n};\n\nfunction verboseFromCursor(\n\treader: ITreeCursor,\n\tschema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,\n): VerboseTree {\n\tconst fields = customFromCursorStored(reader, schema, verboseFromCursor);\n\tconst nodeSchema =\n\t\tschema.get(reader.type) ?? fail(0xac9 /* missing schema for type in cursor */);\n\tif (nodeSchema instanceof LeafNodeStoredSchema) {\n\t\treturn fields as CustomTreeValue;\n\t}\n\n\treturn {\n\t\ttype: reader.type,\n\t\tfields: fields as CustomTreeNode<IFluidHandle>,\n\t};\n}\n\nfunction exportSimpleFieldSchemaStored(schema: TreeFieldStoredSchema): SimpleFieldSchema {\n\tlet kind: FieldKind;\n\tswitch (schema.kind) {\n\t\tcase FieldKinds.identifier.identifier:\n\t\t\tkind = FieldKind.Identifier;\n\t\t\tbreak;\n\t\tcase FieldKinds.optional.identifier:\n\t\t\tkind = FieldKind.Optional;\n\t\t\tbreak;\n\t\tcase FieldKinds.required.identifier:\n\t\t\tkind = FieldKind.Required;\n\t\t\tbreak;\n\t\tcase FieldKinds.forbidden.identifier:\n\t\t\tkind = FieldKind.Optional;\n\t\t\tassert(schema.types.size === 0, 0xa94 /* invalid forbidden field */);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tfail(0xaca /* invalid field kind */);\n\t}\n\treturn { kind, allowedTypesIdentifiers: schema.types, metadata: {} };\n}\n\nfunction exportSimpleNodeSchemaStored(schema: TreeNodeStoredSchema): SimpleNodeSchema {\n\tconst arrayTypes = tryStoredSchemaAsArray(schema);\n\tif (arrayTypes !== undefined) {\n\t\treturn { kind: NodeKind.Array, allowedTypesIdentifiers: arrayTypes, metadata: {} };\n\t}\n\tif (schema instanceof ObjectNodeStoredSchema) {\n\t\tconst fields = new Map<FieldKey, SimpleObjectFieldSchema>();\n\t\tfor (const [storedKey, field] of schema.objectNodeFields) {\n\t\t\tfields.set(storedKey, { ...exportSimpleFieldSchemaStored(field), storedKey });\n\t\t}\n\t\treturn { kind: NodeKind.Object, fields, metadata: {} };\n\t}\n\tif (schema instanceof MapNodeStoredSchema) {\n\t\tassert(\n\t\t\tschema.mapFields.kind === FieldKinds.optional.identifier,\n\t\t\t0xa95 /* Invalid map schema */,\n\t\t);\n\t\treturn {\n\t\t\tkind: NodeKind.Map,\n\t\t\tallowedTypesIdentifiers: schema.mapFields.types,\n\t\t\tmetadata: {},\n\t\t};\n\t}\n\tif (schema instanceof LeafNodeStoredSchema) {\n\t\treturn { kind: NodeKind.Leaf, leafKind: schema.leafValue, metadata: {} };\n\t}\n\tfail(0xacb /* invalid schema kind */);\n}\n"]}
1
+ {"version":3,"file":"sharedTree.js","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.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 type {\n\tErasedType,\n\tIFluidHandle,\n\tIFluidLoadable,\n} from \"@fluidframework/core-interfaces/internal\";\nimport { assert, fail } from \"@fluidframework/core-utils/internal\";\nimport type { IChannelStorageService } from \"@fluidframework/datastore-definitions/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type {\n\tIChannelView,\n\tIFluidSerializer,\n\tSharedKernel,\n} from \"@fluidframework/shared-object-base/internal\";\nimport {\n\tUsageError,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport {\n\ttype CodecWriteOptions,\n\tFluidClientVersion,\n\ttype ICodecOptions,\n\tnoopValidator,\n} from \"../codec/index.js\";\nimport {\n\ttype FieldKey,\n\ttype GraphCommit,\n\ttype IEditableForest,\n\ttype ITreeCursor,\n\ttype JsonableTree,\n\tLeafNodeStoredSchema,\n\tMapNodeStoredSchema,\n\tObjectNodeStoredSchema,\n\tRevisionTagCodec,\n\tSchemaVersion,\n\ttype TaggedChange,\n\ttype TreeFieldStoredSchema,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeNodeStoredSchema,\n\ttype TreeStoredSchema,\n\tTreeStoredSchemaRepository,\n\ttype TreeStoredSchemaSubscription,\n\tmakeDetachedFieldIndex,\n\tmoveToDetachedField,\n} from \"../core/index.js\";\nimport {\n\tDetachedFieldIndexSummarizer,\n\tFieldKinds,\n\tForestSummarizer,\n\tSchemaSummarizer,\n\tTreeCompressionStrategy,\n\tbuildChunkedForest,\n\tbuildForest,\n\tdefaultSchemaPolicy,\n\tjsonableTreeFromFieldCursor,\n\tmakeFieldBatchCodec,\n\tmakeMitigatedChangeFamily,\n\tmakeSchemaCodec,\n\tmakeTreeChunker,\n} from \"../feature-libraries/index.js\";\n// eslint-disable-next-line import/no-internal-modules\nimport type { FormatV1 } from \"../feature-libraries/schema-index/index.js\";\nimport {\n\ttype ClonableSchemaAndPolicy,\n\tDefaultResubmitMachine,\n\ttype ExplicitCoreCodecVersions,\n\tSharedTreeCore,\n} from \"../shared-tree-core/index.js\";\nimport {\n\ttype ITree,\n\ttype ImplicitFieldSchema,\n\tNodeKind,\n\ttype ReadSchema,\n\ttype SimpleFieldSchema,\n\ttype SimpleTreeSchema,\n\ttype TreeView,\n\ttype TreeViewAlpha,\n\ttype TreeViewConfiguration,\n\ttype UnsafeUnknownSchema,\n\ttype VerboseTree,\n\ttryStoredSchemaAsArray,\n\ttype SimpleNodeSchema,\n\tcustomFromCursorStored,\n\tFieldKind,\n\ttype CustomTreeNode,\n\ttype CustomTreeValue,\n\ttype ITreeAlpha,\n\ttype SimpleObjectFieldSchema,\n} from \"../simple-tree/index.js\";\n\nimport { SchematizingSimpleTreeView } from \"./schematizingTreeView.js\";\nimport { SharedTreeReadonlyChangeEnricher } from \"./sharedTreeChangeEnricher.js\";\nimport { SharedTreeChangeFamily } from \"./sharedTreeChangeFamily.js\";\nimport type { SharedTreeChange } from \"./sharedTreeChangeTypes.js\";\nimport type { SharedTreeEditBuilder } from \"./sharedTreeEditBuilder.js\";\nimport { type TreeCheckout, type BranchableTree, createTreeCheckout } from \"./treeCheckout.js\";\nimport {\n\ttype Breakable,\n\tbreakingClass,\n\ttype JsonCompatible,\n\tthrowIfBroken,\n} from \"../util/index.js\";\n\n/**\n * Copy of data from an {@link ITreePrivate} at some point in time.\n * @remarks\n * This is unrelated to Fluids concept of \"snapshots\".\n */\nexport interface SharedTreeContentSnapshot {\n\t/**\n\t * The schema stored in the document.\n\t *\n\t * @remarks\n\t * Edits to the schema can mutate the schema stored of the tree which took this snapshot (but this snapshot will remain the same)\n\t * This is mainly useful for debugging cases where schematize reports an incompatible view schema.\n\t */\n\treadonly schema: TreeStoredSchema;\n\t/**\n\t * All {@link TreeStatus.InDocument} content.\n\t */\n\treadonly tree: JsonableTree[];\n\t/**\n\t * All {@link TreeStatus.Removed} content.\n\t */\n\treadonly removed: [string | number | undefined, number, JsonableTree][];\n}\n\n/**\n * {@link ITree} extended with some non-public APIs.\n * @internal\n */\nexport interface ITreeInternal extends IChannelView, ITreeAlpha {}\n\n/**\n * {@link ITreeInternal} extended with some non-exported APIs.\n * @remarks\n * This allows access to the tree content using the internal data model used at the storage and \"flex\" layers,\n * and should only be needed for testing and debugging this package's internals.\n */\nexport interface ITreePrivate extends ITreeInternal {\n\t/**\n\t * Provides a copy of the current content of the tree.\n\t * This can be useful for inspecting the tree when no suitable view schema is available.\n\t * This is only intended for use in testing and exceptional code paths: it is not performant.\n\t *\n\t * This does not include everything that is included in a tree summary, since information about how to merge future edits is omitted.\n\t */\n\tcontentSnapshot(): SharedTreeContentSnapshot;\n\n\t/**\n\t * Access to internals for testing.\n\t */\n\treadonly kernel: SharedTreeKernel;\n}\n\n/**\n * Has an entry for each codec which writes an explicit version into its data.\n *\n * This is used to map the single API entrypoint controlling the format {@link SharedTreeOptions.formatVersion}\n * to a list of write versions that for each codec that should be used for that format.\n *\n * Note that all explicitly versioned codecs should be using the format version from the data to read encoded data.\n *\n * TODO: Plumb these write versions into forest, schema, detached field index codec creation.\n */\ninterface ExplicitCodecVersions extends ExplicitCoreCodecVersions {\n\tforest: number;\n\tschema: SchemaVersion;\n\tdetachedFieldIndex: number;\n\tfieldBatch: number;\n}\n\nconst formatVersionToTopLevelCodecVersions = new Map<number, ExplicitCodecVersions>([\n\t[\n\t\t1,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 1, message: 1, fieldBatch: 1 },\n\t],\n\t[\n\t\t2,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 2, message: 2, fieldBatch: 1 },\n\t],\n\t[\n\t\t3,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 3, message: 3, fieldBatch: 1 },\n\t],\n\t[\n\t\t4,\n\t\t{ forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },\n\t],\n\t[\n\t\t5,\n\t\t{ forest: 1, schema: 2, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },\n\t],\n]);\n\nfunction getCodecVersions(formatVersion: number): ExplicitCodecVersions {\n\tconst versions = formatVersionToTopLevelCodecVersions.get(formatVersion);\n\tassert(versions !== undefined, 0x90e /* Unknown format version */);\n\treturn versions;\n}\n\n/**\n * The type SharedTree's kernel's view must implement so what when its merged with the underling SharedObject's API it fully implements the required tree API surface ({@link ITreePrivate }).\n */\nexport type SharedTreeKernelView = Omit<ITreePrivate, keyof (IChannelView & IFluidLoadable)>;\n\n/**\n * SharedTreeCore, configured with a good set of indexes and field kinds which will maintain compatibility over time.\n *\n * TODO: detail compatibility requirements.\n */\n@breakingClass\nexport class SharedTreeKernel\n\textends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>\n\timplements SharedKernel\n{\n\tpublic readonly checkout: TreeCheckout;\n\tpublic get storedSchema(): TreeStoredSchemaRepository {\n\t\treturn this.checkout.storedSchema;\n\t}\n\n\t/**\n\t * The app-facing API for SharedTree implemented by this Kernel.\n\t * @remarks\n\t * This is the API grafted onto the ISharedObject which apps can access.\n\t * It includes both the APIs used for internal testing, and public facing APIs (both stable and unstable).\n\t * Different users will have access to different subsets of this API, see {@link ITree}, {@link ITreeAlpha} and {@link ITreeInternal} which this {@link ITreePrivate} extends.\n\t */\n\tpublic readonly view: SharedTreeKernelView;\n\n\tpublic constructor(\n\t\tbreaker: Breakable,\n\t\tsharedObject: IChannelView & IFluidLoadable,\n\t\tserializer: IFluidSerializer,\n\t\tsubmitLocalMessage: (content: unknown, localOpMetadata?: unknown) => void,\n\t\tlastSequenceNumber: () => number | undefined,\n\t\tlogger: ITelemetryLoggerExt | undefined,\n\t\tidCompressor: IIdCompressor,\n\t\toptionsParam: SharedTreeOptionsInternal,\n\t) {\n\t\tconst options = { ...defaultSharedTreeOptions, ...optionsParam };\n\t\tconst codecVersions = getCodecVersions(options.formatVersion);\n\t\tconst schema = new TreeStoredSchemaRepository();\n\t\tconst forest = buildConfiguredForest(breaker, options.forest, schema, idCompressor);\n\t\tconst revisionTagCodec = new RevisionTagCodec(idCompressor);\n\t\tconst removedRoots = makeDetachedFieldIndex(\n\t\t\t\"repair\",\n\t\t\trevisionTagCodec,\n\t\t\tidCompressor,\n\t\t\toptions,\n\t\t);\n\t\tconst schemaCodec = makeSchemaCodec(options, codecVersions.schema);\n\t\tconst schemaSummarizer = new SchemaSummarizer(\n\t\t\tschema,\n\t\t\t{\n\t\t\t\tgetCurrentSeq: lastSequenceNumber,\n\t\t\t},\n\t\t\tschemaCodec,\n\t\t);\n\t\tconst fieldBatchCodec = makeFieldBatchCodec(options, codecVersions.fieldBatch);\n\n\t\tconst encoderContext = {\n\t\t\tschema: {\n\t\t\t\tschema,\n\t\t\t\tpolicy: defaultSchemaPolicy,\n\t\t\t},\n\t\t\tencodeType: options.treeEncodeType,\n\t\t\toriginatorId: idCompressor.localSessionId,\n\t\t\tidCompressor,\n\t\t};\n\t\tconst forestSummarizer = new ForestSummarizer(\n\t\t\tforest,\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\tencoderContext,\n\t\t\toptions,\n\t\t\tidCompressor,\n\t\t);\n\t\tconst removedRootsSummarizer = new DetachedFieldIndexSummarizer(removedRoots);\n\t\tconst innerChangeFamily = new SharedTreeChangeFamily(\n\t\t\trevisionTagCodec,\n\t\t\tfieldBatchCodec,\n\t\t\toptions,\n\t\t\toptions.treeEncodeType,\n\t\t\tidCompressor,\n\t\t);\n\t\tconst changeFamily = makeMitigatedChangeFamily(\n\t\t\tinnerChangeFamily,\n\t\t\tSharedTreeChangeFamily.emptyChange,\n\t\t\t(error: unknown) => {\n\t\t\t\t// TODO:6344 Add telemetry for these errors.\n\t\t\t\t// Rethrowing the error has a different effect depending on the context in which the\n\t\t\t\t// ChangeFamily was invoked:\n\t\t\t\t// - If the ChangeFamily was invoked as part of incoming op processing, rethrowing the error\n\t\t\t\t// will cause the runtime to disconnect the client, log a severe error, and not reconnect.\n\t\t\t\t// This will not cause the host application to crash because it is not on the stack at that time.\n\t\t\t\t// TODO: let the host application know that the client is now disconnected.\n\t\t\t\t// - If the ChangeFamily was invoked as part of dealing with a local change, rethrowing the\n\t\t\t\t// error will cause the host application to crash. This is not ideal, but is better than\n\t\t\t\t// letting the application either send an invalid change to the server or allowing the\n\t\t\t\t// application to continue working when its local branches contain edits that cannot be\n\t\t\t\t// reflected in its views.\n\t\t\t\t// The best course of action for a host application in such a state is to restart.\n\t\t\t\t// TODO: let the host application know about this situation and provide a way to\n\t\t\t\t// programmatically reload the SharedTree container.\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tconst changeEnricher = new SharedTreeReadonlyChangeEnricher(forest, schema, removedRoots);\n\t\tsuper(\n\t\t\tbreaker,\n\t\t\tsharedObject,\n\t\t\tserializer,\n\t\t\tsubmitLocalMessage,\n\t\t\tlogger,\n\t\t\t[schemaSummarizer, forestSummarizer, removedRootsSummarizer],\n\t\t\tchangeFamily,\n\t\t\toptions,\n\t\t\tcodecVersions,\n\t\t\tidCompressor,\n\t\t\tschema,\n\t\t\tdefaultSchemaPolicy,\n\t\t\tnew DefaultResubmitMachine(\n\t\t\t\t(change: TaggedChange<SharedTreeChange>) =>\n\t\t\t\t\tchangeFamily.rebaser.invert(change, true, this.mintRevisionTag()),\n\t\t\t\tchangeEnricher,\n\t\t\t),\n\t\t\tchangeEnricher,\n\t\t);\n\t\tconst localBranch = this.getLocalBranch();\n\t\tthis.checkout = createTreeCheckout(idCompressor, this.mintRevisionTag, revisionTagCodec, {\n\t\t\tbranch: localBranch,\n\t\t\tchangeFamily,\n\t\t\tschema,\n\t\t\tforest,\n\t\t\tfieldBatchCodec,\n\t\t\tremovedRoots,\n\t\t\tchunkCompressionStrategy: options.treeEncodeType,\n\t\t\tlogger,\n\t\t\tbreaker: this.breaker,\n\t\t\tdisposeForksAfterTransaction: options.disposeForksAfterTransaction,\n\t\t});\n\n\t\tthis.checkout.transaction.events.on(\"started\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.startTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.transaction.events.on(\"aborting\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.abortTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.transaction.events.on(\"committing\", () => {\n\t\t\tif (sharedObject.isAttached()) {\n\t\t\t\t// It is currently forbidden to attach during a transaction, so transaction state changes can be ignored until after attaching.\n\t\t\t\tthis.commitEnricher.commitTransaction();\n\t\t\t}\n\t\t});\n\t\tthis.checkout.events.on(\"beforeBatch\", (event) => {\n\t\t\tif (event.type === \"append\" && sharedObject.isAttached()) {\n\t\t\t\tif (this.checkout.transaction.isInProgress()) {\n\t\t\t\t\tthis.commitEnricher.addTransactionCommits(event.newCommits);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.view = {\n\t\t\tcontentSnapshot: () => this.contentSnapshot(),\n\t\t\texportSimpleSchema: () => this.exportSimpleSchema(),\n\t\t\texportVerbose: () => this.exportVerbose(),\n\t\t\tviewWith: this.viewWith.bind(this),\n\t\t\tkernel: this,\n\t\t};\n\t}\n\n\tpublic exportVerbose(): VerboseTree | undefined {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\tconst length = cursor.getFieldLength();\n\t\t\tif (length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t} else if (length === 1) {\n\t\t\t\tcursor.enterNode(0);\n\t\t\t\treturn verboseFromCursor(cursor, this.storedSchema.nodeSchema);\n\t\t\t} else {\n\t\t\t\tfail(0xac8 /* Invalid document root length */);\n\t\t\t}\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\tpublic exportSimpleSchema(): SimpleTreeSchema {\n\t\treturn exportSimpleSchema(this.storedSchema);\n\t}\n\n\t@throwIfBroken\n\tpublic contentSnapshot(): SharedTreeContentSnapshot {\n\t\tconst cursor = this.checkout.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.checkout.forest, cursor);\n\t\t\treturn {\n\t\t\t\tschema: this.storedSchema.clone(),\n\t\t\t\ttree: jsonableTreeFromFieldCursor(cursor),\n\t\t\t\tremoved: this.checkout.getRemovedRoots(),\n\t\t\t};\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\t// For the new TreeViewAlpha API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>>;\n\n\t// For the old TreeView API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<TRoot>;\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> & TreeView<ReadSchema<TRoot>> {\n\t\treturn this.checkout.viewWith(config) as SchematizingSimpleTreeView<TRoot> &\n\t\t\tTreeView<ReadSchema<TRoot>>;\n\t}\n\n\tpublic override async loadCore(services: IChannelStorageService): Promise<void> {\n\t\tawait super.loadCore(services);\n\t\tthis.checkout.load();\n\t}\n\n\tpublic override didAttach(): void {\n\t\tif (this.checkout.transaction.isInProgress()) {\n\t\t\t// Attaching during a transaction is not currently supported.\n\t\t\t// At least part of of the system is known to not handle this case correctly - commit enrichment - and there may be others.\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Cannot attach while a transaction is in progress. Commit or abort the transaction before attaching.\",\n\t\t\t);\n\t\t}\n\t\tsuper.didAttach();\n\t}\n\n\tpublic override applyStashedOp(\n\t\t...args: Parameters<\n\t\t\tSharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>[\"applyStashedOp\"]\n\t\t>\n\t): void {\n\t\tassert(\n\t\t\t!this.checkout.transaction.isInProgress(),\n\t\t\t0x674 /* Unexpected transaction is open while applying stashed ops */,\n\t\t);\n\t\tsuper.applyStashedOp(...args);\n\t}\n\n\tprotected override submitCommit(\n\t\tcommit: GraphCommit<SharedTreeChange>,\n\t\tschemaAndPolicy: ClonableSchemaAndPolicy,\n\t\tisResubmit: boolean,\n\t): void {\n\t\tassert(\n\t\t\t!this.checkout.transaction.isInProgress(),\n\t\t\t0xaa6 /* Cannot submit a commit while a transaction is in progress */,\n\t\t);\n\t\tif (isResubmit) {\n\t\t\treturn super.submitCommit(commit, schemaAndPolicy, isResubmit);\n\t\t}\n\n\t\t// Refrain from submitting new commits until they are validated by the checkout.\n\t\t// This is not a strict requirement for correctness in our system, but in the event that there is a bug when applying commits to the checkout\n\t\t// that causes a crash (e.g. in the forest), this will at least prevent this client from sending the problematic commit to any other clients.\n\t\tthis.checkout.onCommitValid(commit, () =>\n\t\t\tsuper.submitCommit(commit, schemaAndPolicy, isResubmit),\n\t\t);\n\t}\n\n\tpublic onDisconnect(): void {}\n}\n\nexport function exportSimpleSchema(storedSchema: TreeStoredSchema): SimpleTreeSchema {\n\treturn {\n\t\troot: exportSimpleFieldSchemaStored(storedSchema.rootFieldSchema),\n\t\tdefinitions: new Map(\n\t\t\t[...storedSchema.nodeSchema].map(([key, schema]) => {\n\t\t\t\treturn [key, exportSimpleNodeSchemaStored(schema)];\n\t\t\t}),\n\t\t),\n\t};\n}\n\n/**\n * A way to parse schema in the persisted format from {@link extractPersistedSchema}.\n * @remarks\n * This behaves identically to {@link ITreeAlpha.exportSimpleSchema},\n * except that it gets the schema from the caller instead of from an existing tree.\n *\n * This can be useful for inspecting the contents of persisted schema,\n * such as those generated by {@link extractPersistedSchema} for use in testing.\n * Since that data format is otherwise unspecified,\n * this provides a way to inspect its contents with documented semantics.\n * @alpha\n */\nexport function persistedToSimpleSchema(\n\tpersisted: JsonCompatible,\n\toptions: ICodecOptions,\n): SimpleTreeSchema {\n\tconst schemaCodec = makeSchemaCodec(options, SchemaVersion.v1);\n\tconst stored = schemaCodec.decode(persisted as FormatV1);\n\treturn exportSimpleSchema(stored);\n}\n\n/**\n * Get a {@link BranchableTree} from a {@link ITree}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n * @deprecated This API is superseded by {@link TreeBranch}, which should be used instead.\n */\nexport function getBranch(tree: ITree): BranchableTree;\n/**\n * Get a {@link BranchableTree} from a {@link TreeView}.\n * @remarks The branch can be used for \"version control\"-style coordination of edits on the tree.\n * Branches are currently an unstable \"alpha\" API and are subject to change in the future.\n * @privateRemarks This function will be removed if/when the branching API becomes public,\n * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.\n * @alpha\n * @deprecated This API is superseded by {@link TreeBranch}, which should be used instead.\n */\nexport function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\tview: TreeViewAlpha<T>,\n): BranchableTree;\nexport function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\ttreeOrView: ITree | TreeViewAlpha<T>,\n): BranchableTree {\n\tif (treeOrView instanceof SchematizingSimpleTreeView) {\n\t\treturn treeOrView.checkout as unknown as BranchableTree;\n\t}\n\tconst kernel = (treeOrView as ITree as ITreePrivate).kernel;\n\tassert(kernel instanceof SharedTreeKernel, 0xb56 /* Invalid ITree */);\n\t// This cast is safe so long as TreeCheckout supports all the operations on the branch interface.\n\treturn kernel.checkout as unknown as BranchableTree;\n}\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n */\nexport const SharedTreeFormatVersion = {\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t *\n\t * @deprecated - FF does not currently plan on supporting this format long-term.\n\t * Do not write production documents using this format, as they may not be loadable in the future.\n\t */\n\tv1: 1,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv2: 2,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv3: 3,\n\n\t/**\n\t * Requires \\@fluidframework/tree \\>= 2.0.0.\n\t */\n\tv5: 5,\n} as const;\n\n/**\n * Format versions supported by SharedTree.\n *\n * Each version documents a required minimum version of the \\@fluidframework/tree package.\n * @alpha\n * @privateRemarks\n * See packages/dds/tree/docs/main/compatibility.md for information on how to add support for a new format.\n *\n * TODO: Before this gets promoted past Alpha,\n * a separate abstraction more suited for use in the public API should be adopted rather than reusing the same types used internally.\n * Such an abstraction should probably be in the form of a Fluid-Framework wide compatibility enum.\n */\nexport type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;\n\n/**\n * Configuration options for SharedTree.\n * @alpha @input\n */\nexport type SharedTreeOptions = Partial<CodecWriteOptions> &\n\tPartial<SharedTreeFormatOptions> &\n\tForestOptions;\n\nexport interface SharedTreeOptionsInternal extends SharedTreeOptions {\n\tdisposeForksAfterTransaction?: boolean;\n}\n/**\n * Configuration options for SharedTree's internal tree storage.\n * @alpha\n */\nexport interface ForestOptions {\n\t/**\n\t * The {@link ForestType} indicating which forest type should be created for the SharedTree.\n\t */\n\treadonly forest?: ForestType;\n}\n\n/**\n * Options for configuring the persisted format SharedTree uses.\n * @alpha\n */\nexport interface SharedTreeFormatOptions {\n\t/**\n\t * See {@link TreeCompressionStrategy}.\n\t * default: TreeCompressionStrategy.Compressed\n\t */\n\ttreeEncodeType: TreeCompressionStrategy;\n\t/**\n\t * The format version SharedTree should use to persist documents.\n\t *\n\t * This option has compatibility implications for applications using SharedTree.\n\t * Each version documents a required minimum version of \\@fluidframework/tree.\n\t * If this minimum version fails to be met, the SharedTree may fail to load.\n\t * To be safe, application authors should verify that they have saturated this version\n\t * of \\@fluidframework/tree in their ecosystem before changing the format version.\n\t *\n\t * This option defaults to SharedTreeFormatVersion.v2.\n\t */\n\tformatVersion: SharedTreeFormatVersion[keyof SharedTreeFormatVersion];\n}\n\n/**\n * Used to distinguish between different forest types.\n * @remarks\n * Current options are {@link ForestTypeReference}, {@link ForestTypeOptimized} and {@link ForestTypeExpensiveDebug}.\n * @sealed @alpha\n */\nexport interface ForestType extends ErasedType<\"ForestType\"> {}\n\n/**\n * Reference implementation of forest.\n * @remarks\n * A simple implementation with minimal complexity and moderate debuggability, validation and performance.\n * @privateRemarks\n * The \"ObjectForest\" forest type.\n * @alpha\n */\nexport const ForestTypeReference = toForestType(\n\t(breaker: Breakable, schema: TreeStoredSchemaSubscription, idCompressor: IIdCompressor) =>\n\t\tbuildForest(breaker, schema),\n);\n\n/**\n * Optimized implementation of forest.\n * @remarks\n * A complex optimized forest implementation, which has minimal validation and debuggability to optimize for performance.\n * Uses an internal representation optimized for size designed to scale to larger datasets with reduced overhead.\n * @privateRemarks\n * The \"ChunkedForest\" forest type.\n * @alpha\n */\nexport const ForestTypeOptimized = toForestType(\n\t(breaker: Breakable, schema: TreeStoredSchemaSubscription, idCompressor: IIdCompressor) =>\n\t\tbuildChunkedForest(makeTreeChunker(schema, defaultSchemaPolicy), undefined, idCompressor),\n);\n\n/**\n * Slow implementation of forest intended only for debugging.\n * @remarks\n * Includes validation with scales poorly.\n * May be asymptotically slower than {@link ForestTypeReference}, and may perform very badly with larger data sizes.\n * @privateRemarks\n * The \"ObjectForest\" forest type with expensive asserts for debugging.\n * @alpha\n */\nexport const ForestTypeExpensiveDebug = toForestType(\n\t(breaker: Breakable, schema: TreeStoredSchemaSubscription) =>\n\t\tbuildForest(breaker, schema, undefined, true),\n);\n\ntype ForestFactory = (\n\tbreaker: Breakable,\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n) => IEditableForest;\n\nfunction toForestType(factory: ForestFactory): ForestType {\n\treturn factory as unknown as ForestType;\n}\n\n/**\n * Build and return a forest of the requested type.\n */\nexport function buildConfiguredForest(\n\tbreaker: Breakable,\n\tfactory: ForestType,\n\tschema: TreeStoredSchemaSubscription,\n\tidCompressor: IIdCompressor,\n): IEditableForest {\n\treturn (factory as unknown as ForestFactory)(breaker, schema, idCompressor);\n}\n\nexport const defaultSharedTreeOptions: Required<SharedTreeOptionsInternal> = {\n\tjsonValidator: noopValidator,\n\toldestCompatibleClient: FluidClientVersion.v2_0,\n\tforest: ForestTypeReference,\n\ttreeEncodeType: TreeCompressionStrategy.Compressed,\n\tformatVersion: SharedTreeFormatVersion.v3,\n\tdisposeForksAfterTransaction: true,\n};\n\nfunction verboseFromCursor(\n\treader: ITreeCursor,\n\tschema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,\n): VerboseTree {\n\tconst fields = customFromCursorStored(reader, schema, verboseFromCursor);\n\tconst nodeSchema =\n\t\tschema.get(reader.type) ?? fail(0xac9 /* missing schema for type in cursor */);\n\tif (nodeSchema instanceof LeafNodeStoredSchema) {\n\t\treturn fields as CustomTreeValue;\n\t}\n\n\treturn {\n\t\ttype: reader.type,\n\t\tfields: fields as CustomTreeNode<IFluidHandle>,\n\t};\n}\n\nfunction exportSimpleFieldSchemaStored(schema: TreeFieldStoredSchema): SimpleFieldSchema {\n\tlet kind: FieldKind;\n\tswitch (schema.kind) {\n\t\tcase FieldKinds.identifier.identifier:\n\t\t\tkind = FieldKind.Identifier;\n\t\t\tbreak;\n\t\tcase FieldKinds.optional.identifier:\n\t\t\tkind = FieldKind.Optional;\n\t\t\tbreak;\n\t\tcase FieldKinds.required.identifier:\n\t\t\tkind = FieldKind.Required;\n\t\t\tbreak;\n\t\tcase FieldKinds.forbidden.identifier:\n\t\t\tkind = FieldKind.Optional;\n\t\t\tassert(schema.types.size === 0, 0xa94 /* invalid forbidden field */);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tfail(0xaca /* invalid field kind */);\n\t}\n\treturn {\n\t\tkind,\n\t\tallowedTypesIdentifiers: schema.types,\n\t\tmetadata: {},\n\t\tpersistedMetadata: schema.persistedMetadata,\n\t};\n}\n\n/**\n * Export a {@link SimpleNodeSchema} from a {@link TreeNodeStoredSchema}.\n * @privateRemarks\n * TODO: Persist node metadata once schema FormatV2 is supported.\n */\nfunction exportSimpleNodeSchemaStored(schema: TreeNodeStoredSchema): SimpleNodeSchema {\n\tconst arrayTypes = tryStoredSchemaAsArray(schema);\n\tif (arrayTypes !== undefined) {\n\t\treturn {\n\t\t\tkind: NodeKind.Array,\n\t\t\tallowedTypesIdentifiers: arrayTypes,\n\t\t\tmetadata: {},\n\t\t\tpersistedMetadata: schema.metadata,\n\t\t};\n\t}\n\tif (schema instanceof ObjectNodeStoredSchema) {\n\t\tconst fields = new Map<FieldKey, SimpleObjectFieldSchema>();\n\t\tfor (const [storedKey, field] of schema.objectNodeFields) {\n\t\t\tfields.set(storedKey, { ...exportSimpleFieldSchemaStored(field), storedKey });\n\t\t}\n\t\treturn { kind: NodeKind.Object, fields, metadata: {}, persistedMetadata: schema.metadata };\n\t}\n\tif (schema instanceof MapNodeStoredSchema) {\n\t\tassert(\n\t\t\tschema.mapFields.kind === FieldKinds.optional.identifier,\n\t\t\t0xa95 /* Invalid map schema */,\n\t\t);\n\t\treturn {\n\t\t\tkind: NodeKind.Map,\n\t\t\tallowedTypesIdentifiers: schema.mapFields.types,\n\t\t\tmetadata: {},\n\t\t\tpersistedMetadata: schema.metadata,\n\t\t};\n\t}\n\tif (schema instanceof LeafNodeStoredSchema) {\n\t\treturn {\n\t\t\tkind: NodeKind.Leaf,\n\t\t\tleafKind: schema.leafValue,\n\t\t\tmetadata: {},\n\t\t\tpersistedMetadata: schema.metadata,\n\t\t};\n\t}\n\tfail(0xacb /* invalid schema kind */);\n}\n"]}
@@ -6,7 +6,7 @@ import type { IFluidHandle } from "@fluidframework/core-interfaces";
6
6
  import type { IIdCompressor } from "@fluidframework/id-compressor";
7
7
  import { type TreeNode, type Unhydrated, type ImplicitFieldSchema, type InsertableField, type TreeFieldFromImplicitField, type TreeLeafValue, type UnsafeUnknownSchema, type ConciseTree, type TreeEncodingOptions, type VerboseTree, type TreeBranch } from "../simple-tree/index.js";
8
8
  import { type JsonCompatible } from "../util/index.js";
9
- import type { CodecWriteOptions, ICodecOptions } from "../codec/index.js";
9
+ import { type ICodecOptions, type CodecWriteOptions } from "../codec/index.js";
10
10
  /**
11
11
  * A utility interface for retrieving or converting node identifiers.
12
12
  *
@@ -1 +1 @@
1
- {"version":3,"file":"treeAlpha.d.ts","sourceRoot":"","sources":["../../src/shared-tree/treeAlpha.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"treeAlpha.d.ts","sourceRoot":"","sources":["../../src/shared-tree/treeAlpha.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,10 @@ const internal_2 = require("@fluidframework/id-compressor/internal");
10
10
  const internal_3 = require("@fluidframework/telemetry-utils/internal");
11
11
  const index_js_1 = require("../simple-tree/index.js");
12
12
  const index_js_2 = require("../util/index.js");
13
- const index_js_3 = require("../feature-libraries/index.js");
13
+ const index_js_3 = require("../codec/index.js");
14
+ const index_js_4 = require("../feature-libraries/index.js");
14
15
  const independentView_js_1 = require("./independentView.js");
15
16
  const schematizingTreeView_js_1 = require("./schematizingTreeView.js");
16
- const index_js_4 = require("../codec/index.js");
17
17
  const identifier = (node) => {
18
18
  const nodeIdentifier = (0, index_js_1.getIdentifierFromNode)(node, "uncompressed");
19
19
  if (typeof nodeIdentifier === "number") {
@@ -90,17 +90,17 @@ exports.TreeAlpha = {
90
90
  },
91
91
  exportCompressed(node, options) {
92
92
  const schema = (0, index_js_1.tryGetSchema)(node) ?? (0, internal_1.fail)(0xacf /* invalid input */);
93
- const format = (0, index_js_3.fluidVersionToFieldBatchCodecWriteVersion)(options.oldestCompatibleClient);
94
- const codec = (0, index_js_3.makeFieldBatchCodec)({ jsonValidator: index_js_4.noopValidator }, format);
93
+ const format = (0, index_js_4.fluidVersionToFieldBatchCodecWriteVersion)(options.oldestCompatibleClient);
94
+ const codec = (0, index_js_4.makeFieldBatchCodec)({ jsonValidator: index_js_3.noopValidator }, format);
95
95
  const cursor = borrowFieldCursorFromTreeNodeOrValue(node);
96
96
  const batch = [cursor];
97
97
  // If none provided, create a compressor which will not compress anything.
98
98
  const idCompressor = options.idCompressor ?? (0, internal_2.createIdCompressor)();
99
99
  const context = {
100
- encodeType: index_js_3.TreeCompressionStrategy.Compressed,
100
+ encodeType: index_js_4.TreeCompressionStrategy.Compressed,
101
101
  idCompressor,
102
102
  originatorId: idCompressor.localSessionId, // TODO: Why is this needed?
103
- schema: { schema: (0, index_js_1.toStoredSchema)(schema), policy: index_js_3.defaultSchemaPolicy },
103
+ schema: { schema: (0, index_js_1.toStoredSchema)(schema), policy: index_js_4.defaultSchemaPolicy },
104
104
  };
105
105
  const result = codec.encode(batch, context);
106
106
  return result;
@@ -108,7 +108,8 @@ exports.TreeAlpha = {
108
108
  importCompressed(schema, compressedData, options) {
109
109
  const config = new index_js_1.TreeViewConfigurationAlpha({ schema });
110
110
  const content = {
111
- schema: (0, index_js_1.extractPersistedSchema)(config, index_js_4.currentVersion),
111
+ // Always use a v1 schema codec for consistency.
112
+ schema: (0, index_js_1.extractPersistedSchema)(config, index_js_3.FluidClientVersion.v2_0),
112
113
  tree: compressedData,
113
114
  idCompressor: options.idCompressor ?? (0, internal_2.createIdCompressor)(),
114
115
  };
@@ -144,7 +145,7 @@ function exportConcise(node, options) {
144
145
  * The cursor must be put back to its original location before the node is used again.
145
146
  */
146
147
  function borrowCursorFromTreeNodeOrValue(node) {
147
- if ((0, index_js_3.isTreeValue)(node)) {
148
+ if ((0, index_js_4.isTreeValue)(node)) {
148
149
  return (0, index_js_1.cursorFromVerbose)(node, {});
149
150
  }
150
151
  const kernel = (0, index_js_1.getKernel)(node);
@@ -158,11 +159,11 @@ function borrowCursorFromTreeNodeOrValue(node) {
158
159
  */
159
160
  function borrowFieldCursorFromTreeNodeOrValue(node) {
160
161
  if (node === undefined) {
161
- return (0, index_js_3.cursorForMapTreeField)([]);
162
+ return (0, index_js_4.cursorForMapTreeField)([]);
162
163
  }
163
164
  const cursor = borrowCursorFromTreeNodeOrValue(node);
164
165
  // TODO: avoid copy: borrow cursor from field instead.
165
- const mapTree = (0, index_js_3.mapTreeFromCursor)(cursor);
166
- return (0, index_js_3.cursorForMapTreeField)([mapTree]);
166
+ const mapTree = (0, index_js_4.mapTreeFromCursor)(cursor);
167
+ return (0, index_js_4.cursorForMapTreeField)([mapTree]);
167
168
  }
168
169
  //# sourceMappingURL=treeAlpha.js.map