@fluidframework/tree 2.41.0 → 2.43.0-343119

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. package/.vscode/settings.json +1 -0
  2. package/CHANGELOG.md +33 -0
  3. package/api-report/tree.alpha.api.md +70 -28
  4. package/api-report/tree.beta.api.md +33 -0
  5. package/dist/alpha.d.ts +12 -6
  6. package/dist/beta.d.ts +6 -1
  7. package/dist/codec/codec.d.ts +23 -3
  8. package/dist/codec/codec.d.ts.map +1 -1
  9. package/dist/codec/codec.js.map +1 -1
  10. package/dist/codec/index.d.ts +1 -1
  11. package/dist/codec/index.d.ts.map +1 -1
  12. package/dist/codec/index.js.map +1 -1
  13. package/dist/codec/versioned/codec.d.ts +35 -2
  14. package/dist/codec/versioned/codec.d.ts.map +1 -1
  15. package/dist/codec/versioned/codec.js +38 -3
  16. package/dist/codec/versioned/codec.js.map +1 -1
  17. package/dist/core/index.d.ts +1 -1
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +5 -2
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/schema-stored/formatV2.d.ts +80 -0
  22. package/dist/core/schema-stored/formatV2.d.ts.map +1 -0
  23. package/dist/core/schema-stored/formatV2.js +55 -0
  24. package/dist/core/schema-stored/formatV2.js.map +1 -0
  25. package/dist/core/schema-stored/index.d.ts +3 -1
  26. package/dist/core/schema-stored/index.d.ts.map +1 -1
  27. package/dist/core/schema-stored/index.js +5 -2
  28. package/dist/core/schema-stored/index.js.map +1 -1
  29. package/dist/core/schema-stored/schema.d.ts +49 -17
  30. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  31. package/dist/core/schema-stored/schema.js +65 -22
  32. package/dist/core/schema-stored/schema.js.map +1 -1
  33. package/dist/core/tree/detachedFieldIndex.d.ts +2 -2
  34. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  35. package/dist/core/tree/detachedFieldIndex.js +5 -1
  36. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  37. package/dist/core/tree/mapTree.d.ts +2 -1
  38. package/dist/core/tree/mapTree.d.ts.map +1 -1
  39. package/dist/core/tree/mapTree.js +11 -5
  40. package/dist/core/tree/mapTree.js.map +1 -1
  41. package/dist/core/tree/visitorUtils.d.ts +2 -2
  42. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  43. package/dist/core/tree/visitorUtils.js.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +9 -7
  45. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +13 -9
  47. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  48. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +3 -3
  49. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  50. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +6 -6
  51. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts +1 -1
  53. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +3 -3
  55. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  56. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -2
  57. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  58. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  59. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +4 -3
  60. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  61. package/dist/feature-libraries/default-schema/schemaChecker.js +4 -3
  62. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  63. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +8 -3
  64. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  65. package/dist/feature-libraries/detachedFieldIndexSummarizer.js +2 -5
  66. package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  67. package/dist/feature-libraries/flex-tree/context.d.ts +14 -6
  68. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  69. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  70. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +48 -29
  71. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  72. package/dist/feature-libraries/flex-tree/flexTreeTypes.js +4 -0
  73. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  74. package/dist/feature-libraries/flex-tree/index.d.ts +2 -3
  75. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  76. package/dist/feature-libraries/flex-tree/index.js +1 -7
  77. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  78. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +2 -2
  79. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  80. package/dist/feature-libraries/flex-tree/lazyEntity.js +3 -0
  81. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  82. package/dist/feature-libraries/flex-tree/lazyField.d.ts +6 -7
  83. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  84. package/dist/feature-libraries/flex-tree/lazyField.js +2 -5
  85. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  86. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +8 -7
  87. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  88. package/dist/feature-libraries/flex-tree/lazyNode.js +17 -6
  89. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  90. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +10 -5
  91. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  92. package/dist/feature-libraries/forest-summary/forestSummarizer.js +9 -12
  93. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  94. package/dist/feature-libraries/index.d.ts +2 -2
  95. package/dist/feature-libraries/index.d.ts.map +1 -1
  96. package/dist/feature-libraries/index.js +4 -3
  97. package/dist/feature-libraries/index.js.map +1 -1
  98. package/dist/feature-libraries/mapTreeCursor.d.ts +53 -3
  99. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  100. package/dist/feature-libraries/mapTreeCursor.js +45 -7
  101. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  102. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +1 -1
  103. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js +2 -0
  104. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
  105. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
  106. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  107. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +5 -5
  108. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  109. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  110. package/dist/feature-libraries/object-forest/objectForest.js +2 -0
  111. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  112. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  113. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -4
  114. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  115. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -36
  116. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  117. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +3 -3
  118. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  119. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  120. package/dist/feature-libraries/schema-index/codec.js +59 -9
  121. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  122. package/dist/feature-libraries/schema-index/formatV1.d.ts +1 -1
  123. package/dist/feature-libraries/schema-index/formatV2.d.ts +42 -0
  124. package/dist/feature-libraries/schema-index/formatV2.d.ts.map +1 -0
  125. package/dist/feature-libraries/schema-index/formatV2.js +26 -0
  126. package/dist/feature-libraries/schema-index/formatV2.js.map +1 -0
  127. package/dist/feature-libraries/schema-index/index.d.ts +2 -1
  128. package/dist/feature-libraries/schema-index/index.d.ts.map +1 -1
  129. package/dist/feature-libraries/schema-index/index.js +4 -2
  130. package/dist/feature-libraries/schema-index/index.js.map +1 -1
  131. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +7 -2
  132. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  133. package/dist/feature-libraries/schema-index/schemaSummarizer.js +6 -6
  134. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  135. package/dist/feature-libraries/treeCursorUtils.d.ts +5 -1
  136. package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  137. package/dist/feature-libraries/treeCursorUtils.js +8 -2
  138. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  139. package/dist/index.d.ts +3 -3
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js.map +1 -1
  142. package/dist/packageVersion.d.ts +1 -1
  143. package/dist/packageVersion.d.ts.map +1 -1
  144. package/dist/packageVersion.js +1 -1
  145. package/dist/packageVersion.js.map +1 -1
  146. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  147. package/dist/shared-tree/schematizeTree.js +1 -0
  148. package/dist/shared-tree/schematizeTree.js.map +1 -1
  149. package/dist/shared-tree/schematizingTreeView.d.ts +11 -1
  150. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  151. package/dist/shared-tree/schematizingTreeView.js +36 -22
  152. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  153. package/dist/shared-tree/sharedTree.d.ts +8 -4
  154. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  155. package/dist/shared-tree/sharedTree.js +35 -5
  156. package/dist/shared-tree/sharedTree.js.map +1 -1
  157. package/dist/shared-tree/tree.d.ts.map +1 -1
  158. package/dist/shared-tree/tree.js +8 -24
  159. package/dist/shared-tree/tree.js.map +1 -1
  160. package/dist/shared-tree/treeAlpha.d.ts +2 -3
  161. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  162. package/dist/shared-tree/treeAlpha.js +4 -5
  163. package/dist/shared-tree/treeAlpha.js.map +1 -1
  164. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  165. package/dist/shared-tree/treeCheckout.js +5 -2
  166. package/dist/shared-tree/treeCheckout.js.map +1 -1
  167. package/dist/shared-tree-core/editManagerSummarizer.d.ts +8 -3
  168. package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  169. package/dist/shared-tree-core/editManagerSummarizer.js +2 -5
  170. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  171. package/dist/shared-tree-core/sharedTreeCore.d.ts +18 -7
  172. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  173. package/dist/shared-tree-core/sharedTreeCore.js +15 -2
  174. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  175. package/dist/simple-tree/api/configuration.d.ts +2 -2
  176. package/dist/simple-tree/api/configuration.js +1 -1
  177. package/dist/simple-tree/api/configuration.js.map +1 -1
  178. package/dist/simple-tree/api/create.d.ts +9 -4
  179. package/dist/simple-tree/api/create.d.ts.map +1 -1
  180. package/dist/simple-tree/api/create.js +29 -16
  181. package/dist/simple-tree/api/create.js.map +1 -1
  182. package/dist/simple-tree/api/customTree.d.ts +4 -0
  183. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  184. package/dist/simple-tree/api/customTree.js +9 -1
  185. package/dist/simple-tree/api/customTree.js.map +1 -1
  186. package/dist/simple-tree/api/index.d.ts +1 -1
  187. package/dist/simple-tree/api/index.d.ts.map +1 -1
  188. package/dist/simple-tree/api/index.js +1 -2
  189. package/dist/simple-tree/api/index.js.map +1 -1
  190. package/dist/simple-tree/api/schemaCompatibilityTester.js +1 -1
  191. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  192. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
  193. package/dist/simple-tree/api/schemaCreationUtilities.js +3 -3
  194. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  195. package/dist/simple-tree/api/schemaFactory.d.ts +25 -13
  196. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  197. package/dist/simple-tree/api/schemaFactory.js +42 -9
  198. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  199. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +41 -11
  200. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  201. package/dist/simple-tree/api/schemaFactoryAlpha.js +31 -4
  202. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  203. package/dist/simple-tree/api/storedSchema.js +2 -2
  204. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  205. package/dist/simple-tree/api/treeChangeEvents.d.ts +8 -3
  206. package/dist/simple-tree/api/treeChangeEvents.d.ts.map +1 -1
  207. package/dist/simple-tree/api/treeChangeEvents.js.map +1 -1
  208. package/dist/simple-tree/api/treeNodeApi.d.ts +14 -3
  209. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  210. package/dist/simple-tree/api/treeNodeApi.js +32 -17
  211. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  212. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  213. package/dist/simple-tree/api/verboseTree.js +12 -9
  214. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  215. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  216. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +5 -0
  217. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  218. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  219. package/dist/simple-tree/core/getOrCreateNode.js +2 -1
  220. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
  221. package/dist/simple-tree/core/index.d.ts +2 -2
  222. package/dist/simple-tree/core/index.d.ts.map +1 -1
  223. package/dist/simple-tree/core/index.js +3 -4
  224. package/dist/simple-tree/core/index.js.map +1 -1
  225. package/dist/simple-tree/core/treeNodeKernel.d.ts +15 -25
  226. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  227. package/dist/simple-tree/core/treeNodeKernel.js +27 -34
  228. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  229. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +129 -64
  230. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  231. package/dist/simple-tree/core/unhydratedFlexTree.js +175 -207
  232. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  233. package/dist/simple-tree/index.d.ts +5 -5
  234. package/dist/simple-tree/index.d.ts.map +1 -1
  235. package/dist/simple-tree/index.js +5 -5
  236. package/dist/simple-tree/index.js.map +1 -1
  237. package/dist/simple-tree/leafNodeSchema.d.ts +2 -0
  238. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  239. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  240. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +3 -1
  241. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  242. package/dist/simple-tree/node-kinds/array/arrayNode.js +8 -7
  243. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  244. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  245. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  246. package/dist/simple-tree/node-kinds/index.js +1 -2
  247. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  248. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +3 -2
  249. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  250. package/dist/simple-tree/node-kinds/map/mapNode.js +6 -4
  251. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  252. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  253. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  254. package/dist/simple-tree/node-kinds/object/index.js +1 -2
  255. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  256. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +5 -15
  257. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  258. package/dist/simple-tree/node-kinds/object/objectNode.js +15 -44
  259. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  260. package/dist/simple-tree/prepareForInsertion.d.ts +20 -6
  261. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  262. package/dist/simple-tree/prepareForInsertion.js +31 -20
  263. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  264. package/dist/simple-tree/schemaTypes.d.ts +56 -9
  265. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  266. package/dist/simple-tree/schemaTypes.js +28 -1
  267. package/dist/simple-tree/schemaTypes.js.map +1 -1
  268. package/dist/simple-tree/simpleSchema.d.ts +22 -4
  269. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  270. package/dist/simple-tree/simpleSchema.js.map +1 -1
  271. package/dist/simple-tree/toStoredSchema.d.ts +8 -1
  272. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  273. package/dist/simple-tree/toStoredSchema.js +19 -7
  274. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  275. package/{lib/simple-tree/toMapTree.d.ts → dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts} +12 -23
  276. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -0
  277. package/dist/simple-tree/{toMapTree.js → unhydratedFlexTreeFromInsertable.js} +103 -185
  278. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -0
  279. package/dist/tableSchema.d.ts +1 -1
  280. package/dist/treeFactory.d.ts.map +1 -1
  281. package/dist/treeFactory.js +6 -1
  282. package/dist/treeFactory.js.map +1 -1
  283. package/dist/util/index.d.ts +1 -1
  284. package/dist/util/index.d.ts.map +1 -1
  285. package/dist/util/index.js +2 -1
  286. package/dist/util/index.js.map +1 -1
  287. package/dist/util/typeUtils.d.ts +2 -2
  288. package/dist/util/typeUtils.js.map +1 -1
  289. package/dist/util/utils.d.ts +6 -0
  290. package/dist/util/utils.d.ts.map +1 -1
  291. package/dist/util/utils.js +8 -1
  292. package/dist/util/utils.js.map +1 -1
  293. package/docs/user-facing/schema-evolution.md +1 -1
  294. package/lib/alpha.d.ts +12 -6
  295. package/lib/beta.d.ts +6 -1
  296. package/lib/codec/codec.d.ts +23 -3
  297. package/lib/codec/codec.d.ts.map +1 -1
  298. package/lib/codec/codec.js.map +1 -1
  299. package/lib/codec/index.d.ts +1 -1
  300. package/lib/codec/index.d.ts.map +1 -1
  301. package/lib/codec/index.js.map +1 -1
  302. package/lib/codec/versioned/codec.d.ts +35 -2
  303. package/lib/codec/versioned/codec.d.ts.map +1 -1
  304. package/lib/codec/versioned/codec.js +36 -2
  305. package/lib/codec/versioned/codec.js.map +1 -1
  306. package/lib/core/index.d.ts +1 -1
  307. package/lib/core/index.d.ts.map +1 -1
  308. package/lib/core/index.js +1 -1
  309. package/lib/core/index.js.map +1 -1
  310. package/lib/core/schema-stored/formatV2.d.ts +80 -0
  311. package/lib/core/schema-stored/formatV2.d.ts.map +1 -0
  312. package/lib/core/schema-stored/formatV2.js +52 -0
  313. package/lib/core/schema-stored/formatV2.js.map +1 -0
  314. package/lib/core/schema-stored/index.d.ts +3 -1
  315. package/lib/core/schema-stored/index.d.ts.map +1 -1
  316. package/lib/core/schema-stored/index.js +3 -1
  317. package/lib/core/schema-stored/index.js.map +1 -1
  318. package/lib/core/schema-stored/schema.d.ts +49 -17
  319. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  320. package/lib/core/schema-stored/schema.js +63 -21
  321. package/lib/core/schema-stored/schema.js.map +1 -1
  322. package/lib/core/tree/detachedFieldIndex.d.ts +2 -2
  323. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  324. package/lib/core/tree/detachedFieldIndex.js +6 -2
  325. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  326. package/lib/core/tree/mapTree.d.ts +2 -1
  327. package/lib/core/tree/mapTree.d.ts.map +1 -1
  328. package/lib/core/tree/mapTree.js +11 -5
  329. package/lib/core/tree/mapTree.js.map +1 -1
  330. package/lib/core/tree/visitorUtils.d.ts +2 -2
  331. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  332. package/lib/core/tree/visitorUtils.js.map +1 -1
  333. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +9 -7
  334. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  335. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +11 -7
  336. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  337. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +3 -3
  338. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  339. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +7 -7
  340. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  341. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts +1 -1
  342. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  343. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +3 -3
  344. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  345. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -2
  346. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  347. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  348. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +4 -3
  349. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  350. package/lib/feature-libraries/default-schema/schemaChecker.js +4 -3
  351. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  352. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +8 -3
  353. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  354. package/lib/feature-libraries/detachedFieldIndexSummarizer.js +2 -5
  355. package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  356. package/lib/feature-libraries/flex-tree/context.d.ts +14 -6
  357. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  358. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  359. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +48 -29
  360. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  361. package/lib/feature-libraries/flex-tree/flexTreeTypes.js +4 -0
  362. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  363. package/lib/feature-libraries/flex-tree/index.d.ts +2 -3
  364. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  365. package/lib/feature-libraries/flex-tree/index.js +0 -1
  366. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  367. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +2 -2
  368. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  369. package/lib/feature-libraries/flex-tree/lazyEntity.js +3 -0
  370. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  371. package/lib/feature-libraries/flex-tree/lazyField.d.ts +6 -7
  372. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  373. package/lib/feature-libraries/flex-tree/lazyField.js +3 -6
  374. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  375. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +8 -7
  376. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  377. package/lib/feature-libraries/flex-tree/lazyNode.js +17 -6
  378. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  379. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +10 -5
  380. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  381. package/lib/feature-libraries/forest-summary/forestSummarizer.js +4 -7
  382. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  383. package/lib/feature-libraries/index.d.ts +2 -2
  384. package/lib/feature-libraries/index.d.ts.map +1 -1
  385. package/lib/feature-libraries/index.js +2 -2
  386. package/lib/feature-libraries/index.js.map +1 -1
  387. package/lib/feature-libraries/mapTreeCursor.d.ts +53 -3
  388. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  389. package/lib/feature-libraries/mapTreeCursor.js +43 -7
  390. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  391. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +1 -1
  392. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js +2 -0
  393. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
  394. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
  395. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  396. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +5 -5
  397. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  398. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  399. package/lib/feature-libraries/object-forest/objectForest.js +2 -0
  400. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  401. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  402. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -4
  403. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  404. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -36
  405. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  406. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js +3 -3
  407. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  408. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  409. package/lib/feature-libraries/schema-index/codec.js +60 -10
  410. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  411. package/lib/feature-libraries/schema-index/formatV1.d.ts +1 -1
  412. package/lib/feature-libraries/schema-index/formatV2.d.ts +42 -0
  413. package/lib/feature-libraries/schema-index/formatV2.d.ts.map +1 -0
  414. package/lib/feature-libraries/schema-index/formatV2.js +23 -0
  415. package/lib/feature-libraries/schema-index/formatV2.js.map +1 -0
  416. package/lib/feature-libraries/schema-index/index.d.ts +2 -1
  417. package/lib/feature-libraries/schema-index/index.d.ts.map +1 -1
  418. package/lib/feature-libraries/schema-index/index.js +2 -1
  419. package/lib/feature-libraries/schema-index/index.js.map +1 -1
  420. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +7 -2
  421. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  422. package/lib/feature-libraries/schema-index/schemaSummarizer.js +6 -6
  423. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  424. package/lib/feature-libraries/treeCursorUtils.d.ts +5 -1
  425. package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  426. package/lib/feature-libraries/treeCursorUtils.js +8 -2
  427. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  428. package/lib/index.d.ts +3 -3
  429. package/lib/index.d.ts.map +1 -1
  430. package/lib/index.js.map +1 -1
  431. package/lib/packageVersion.d.ts +1 -1
  432. package/lib/packageVersion.d.ts.map +1 -1
  433. package/lib/packageVersion.js +1 -1
  434. package/lib/packageVersion.js.map +1 -1
  435. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  436. package/lib/shared-tree/schematizeTree.js +1 -0
  437. package/lib/shared-tree/schematizeTree.js.map +1 -1
  438. package/lib/shared-tree/schematizingTreeView.d.ts +11 -1
  439. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  440. package/lib/shared-tree/schematizingTreeView.js +34 -21
  441. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  442. package/lib/shared-tree/sharedTree.d.ts +8 -4
  443. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  444. package/lib/shared-tree/sharedTree.js +36 -6
  445. package/lib/shared-tree/sharedTree.js.map +1 -1
  446. package/lib/shared-tree/tree.d.ts.map +1 -1
  447. package/lib/shared-tree/tree.js +2 -18
  448. package/lib/shared-tree/tree.js.map +1 -1
  449. package/lib/shared-tree/treeAlpha.d.ts +2 -3
  450. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  451. package/lib/shared-tree/treeAlpha.js +6 -7
  452. package/lib/shared-tree/treeAlpha.js.map +1 -1
  453. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  454. package/lib/shared-tree/treeCheckout.js +6 -3
  455. package/lib/shared-tree/treeCheckout.js.map +1 -1
  456. package/lib/shared-tree-core/editManagerSummarizer.d.ts +8 -3
  457. package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  458. package/lib/shared-tree-core/editManagerSummarizer.js +2 -5
  459. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  460. package/lib/shared-tree-core/sharedTreeCore.d.ts +18 -7
  461. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  462. package/lib/shared-tree-core/sharedTreeCore.js +15 -2
  463. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  464. package/lib/simple-tree/api/configuration.d.ts +2 -2
  465. package/lib/simple-tree/api/configuration.js +1 -1
  466. package/lib/simple-tree/api/configuration.js.map +1 -1
  467. package/lib/simple-tree/api/create.d.ts +9 -4
  468. package/lib/simple-tree/api/create.d.ts.map +1 -1
  469. package/lib/simple-tree/api/create.js +22 -9
  470. package/lib/simple-tree/api/create.js.map +1 -1
  471. package/lib/simple-tree/api/customTree.d.ts +4 -0
  472. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  473. package/lib/simple-tree/api/customTree.js +7 -0
  474. package/lib/simple-tree/api/customTree.js.map +1 -1
  475. package/lib/simple-tree/api/index.d.ts +1 -1
  476. package/lib/simple-tree/api/index.d.ts.map +1 -1
  477. package/lib/simple-tree/api/index.js +1 -1
  478. package/lib/simple-tree/api/index.js.map +1 -1
  479. package/lib/simple-tree/api/schemaCompatibilityTester.js +1 -1
  480. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  481. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
  482. package/lib/simple-tree/api/schemaCreationUtilities.js +3 -3
  483. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  484. package/lib/simple-tree/api/schemaFactory.d.ts +25 -13
  485. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  486. package/lib/simple-tree/api/schemaFactory.js +44 -11
  487. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  488. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +41 -11
  489. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  490. package/lib/simple-tree/api/schemaFactoryAlpha.js +31 -4
  491. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  492. package/lib/simple-tree/api/storedSchema.js +2 -2
  493. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  494. package/lib/simple-tree/api/treeChangeEvents.d.ts +8 -3
  495. package/lib/simple-tree/api/treeChangeEvents.d.ts.map +1 -1
  496. package/lib/simple-tree/api/treeChangeEvents.js.map +1 -1
  497. package/lib/simple-tree/api/treeNodeApi.d.ts +14 -3
  498. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  499. package/lib/simple-tree/api/treeNodeApi.js +35 -20
  500. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  501. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  502. package/lib/simple-tree/api/verboseTree.js +13 -10
  503. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  504. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  505. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +5 -0
  506. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  507. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  508. package/lib/simple-tree/core/getOrCreateNode.js +3 -2
  509. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
  510. package/lib/simple-tree/core/index.d.ts +2 -2
  511. package/lib/simple-tree/core/index.d.ts.map +1 -1
  512. package/lib/simple-tree/core/index.js +2 -2
  513. package/lib/simple-tree/core/index.js.map +1 -1
  514. package/lib/simple-tree/core/treeNodeKernel.d.ts +15 -25
  515. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  516. package/lib/simple-tree/core/treeNodeKernel.js +25 -33
  517. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  518. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +129 -64
  519. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  520. package/lib/simple-tree/core/unhydratedFlexTree.js +174 -208
  521. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  522. package/lib/simple-tree/index.d.ts +5 -5
  523. package/lib/simple-tree/index.d.ts.map +1 -1
  524. package/lib/simple-tree/index.js +3 -3
  525. package/lib/simple-tree/index.js.map +1 -1
  526. package/lib/simple-tree/leafNodeSchema.d.ts +2 -0
  527. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  528. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  529. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +3 -1
  530. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  531. package/lib/simple-tree/node-kinds/array/arrayNode.js +7 -6
  532. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  533. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  534. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  535. package/lib/simple-tree/node-kinds/index.js +1 -1
  536. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  537. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +3 -2
  538. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  539. package/lib/simple-tree/node-kinds/map/mapNode.js +8 -6
  540. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  541. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  542. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  543. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  544. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  545. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +5 -15
  546. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  547. package/lib/simple-tree/node-kinds/object/objectNode.js +6 -34
  548. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  549. package/lib/simple-tree/prepareForInsertion.d.ts +20 -6
  550. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  551. package/lib/simple-tree/prepareForInsertion.js +30 -20
  552. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  553. package/lib/simple-tree/schemaTypes.d.ts +56 -9
  554. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  555. package/lib/simple-tree/schemaTypes.js +28 -1
  556. package/lib/simple-tree/schemaTypes.js.map +1 -1
  557. package/lib/simple-tree/simpleSchema.d.ts +22 -4
  558. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  559. package/lib/simple-tree/simpleSchema.js.map +1 -1
  560. package/lib/simple-tree/toStoredSchema.d.ts +8 -1
  561. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  562. package/lib/simple-tree/toStoredSchema.js +17 -5
  563. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  564. package/{dist/simple-tree/toMapTree.d.ts → lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts} +12 -23
  565. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -0
  566. package/lib/simple-tree/{toMapTree.js → unhydratedFlexTreeFromInsertable.js} +105 -186
  567. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -0
  568. package/lib/tableSchema.d.ts +1 -1
  569. package/lib/treeFactory.d.ts.map +1 -1
  570. package/lib/treeFactory.js +6 -1
  571. package/lib/treeFactory.js.map +1 -1
  572. package/lib/util/index.d.ts +1 -1
  573. package/lib/util/index.d.ts.map +1 -1
  574. package/lib/util/index.js +1 -1
  575. package/lib/util/index.js.map +1 -1
  576. package/lib/util/typeUtils.d.ts +2 -2
  577. package/lib/util/typeUtils.js.map +1 -1
  578. package/lib/util/utils.d.ts +6 -0
  579. package/lib/util/utils.d.ts.map +1 -1
  580. package/lib/util/utils.js +6 -0
  581. package/lib/util/utils.js.map +1 -1
  582. package/package.json +21 -21
  583. package/src/codec/codec.ts +24 -3
  584. package/src/codec/index.ts +1 -0
  585. package/src/codec/versioned/codec.ts +42 -5
  586. package/src/core/index.ts +3 -1
  587. package/src/core/schema-stored/formatV2.ts +78 -0
  588. package/src/core/schema-stored/index.ts +4 -1
  589. package/src/core/schema-stored/schema.ts +123 -33
  590. package/src/core/tree/detachedFieldIndex.ts +13 -4
  591. package/src/core/tree/mapTree.ts +22 -7
  592. package/src/core/tree/visitorUtils.ts +2 -2
  593. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +16 -11
  594. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +16 -7
  595. package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +4 -4
  596. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +3 -2
  597. package/src/feature-libraries/default-schema/schemaChecker.ts +7 -6
  598. package/src/feature-libraries/detachedFieldIndexSummarizer.ts +9 -16
  599. package/src/feature-libraries/flex-tree/context.ts +17 -7
  600. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +57 -33
  601. package/src/feature-libraries/flex-tree/index.ts +4 -8
  602. package/src/feature-libraries/flex-tree/lazyEntity.ts +5 -1
  603. package/src/feature-libraries/flex-tree/lazyField.ts +12 -13
  604. package/src/feature-libraries/flex-tree/lazyNode.ts +21 -8
  605. package/src/feature-libraries/forest-summary/forestSummarizer.ts +12 -18
  606. package/src/feature-libraries/index.ts +10 -1
  607. package/src/feature-libraries/mapTreeCursor.ts +112 -16
  608. package/src/feature-libraries/modular-schema/fieldKindWithEditor.ts +2 -0
  609. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +9 -5
  610. package/src/feature-libraries/object-forest/objectForest.ts +3 -0
  611. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +11 -6
  612. package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +3 -3
  613. package/src/feature-libraries/schema-index/codec.ts +73 -14
  614. package/src/feature-libraries/schema-index/formatV2.ts +30 -0
  615. package/src/feature-libraries/schema-index/index.ts +2 -1
  616. package/src/feature-libraries/schema-index/schemaSummarizer.ts +11 -18
  617. package/src/feature-libraries/treeCursorUtils.ts +21 -10
  618. package/src/index.ts +6 -0
  619. package/src/packageVersion.ts +1 -1
  620. package/src/shared-tree/schematizeTree.ts +1 -0
  621. package/src/shared-tree/schematizingTreeView.ts +40 -22
  622. package/src/shared-tree/sharedTree.ts +51 -15
  623. package/src/shared-tree/tree.ts +5 -20
  624. package/src/shared-tree/treeAlpha.ts +23 -12
  625. package/src/shared-tree/treeCheckout.ts +6 -3
  626. package/src/shared-tree-core/editManagerSummarizer.ts +9 -16
  627. package/src/shared-tree-core/sharedTreeCore.ts +33 -24
  628. package/src/simple-tree/api/configuration.ts +3 -3
  629. package/src/simple-tree/api/create.ts +49 -19
  630. package/src/simple-tree/api/customTree.ts +10 -0
  631. package/src/simple-tree/api/index.ts +1 -4
  632. package/src/simple-tree/api/schemaCompatibilityTester.ts +1 -1
  633. package/src/simple-tree/api/schemaCreationUtilities.ts +3 -3
  634. package/src/simple-tree/api/schemaFactory.ts +78 -24
  635. package/src/simple-tree/api/schemaFactoryAlpha.ts +53 -8
  636. package/src/simple-tree/api/storedSchema.ts +4 -4
  637. package/src/simple-tree/api/treeChangeEvents.ts +8 -3
  638. package/src/simple-tree/api/treeNodeApi.ts +48 -27
  639. package/src/simple-tree/api/verboseTree.ts +15 -12
  640. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +5 -0
  641. package/src/simple-tree/core/getOrCreateNode.ts +4 -2
  642. package/src/simple-tree/core/index.ts +2 -3
  643. package/src/simple-tree/core/treeNodeKernel.ts +38 -55
  644. package/src/simple-tree/core/unhydratedFlexTree.ts +231 -292
  645. package/src/simple-tree/index.ts +6 -3
  646. package/src/simple-tree/leafNodeSchema.ts +2 -0
  647. package/src/simple-tree/node-kinds/array/arrayNode.ts +17 -13
  648. package/src/simple-tree/node-kinds/index.ts +0 -1
  649. package/src/simple-tree/node-kinds/map/mapNode.ts +17 -11
  650. package/src/simple-tree/node-kinds/object/index.ts +0 -1
  651. package/src/simple-tree/node-kinds/object/objectNode.ts +15 -49
  652. package/src/simple-tree/prepareForInsertion.ts +54 -43
  653. package/src/simple-tree/schemaTypes.ts +103 -13
  654. package/src/simple-tree/simpleSchema.ts +27 -5
  655. package/src/simple-tree/toStoredSchema.ts +22 -5
  656. package/src/simple-tree/{toMapTree.ts → unhydratedFlexTreeFromInsertable.ts} +134 -226
  657. package/src/treeFactory.ts +6 -1
  658. package/src/util/index.ts +1 -0
  659. package/src/util/typeUtils.ts +2 -2
  660. package/src/util/utils.ts +9 -0
  661. package/dist/feature-libraries/flex-tree/navigation.d.ts +0 -46
  662. package/dist/feature-libraries/flex-tree/navigation.d.ts.map +0 -1
  663. package/dist/feature-libraries/flex-tree/navigation.js +0 -104
  664. package/dist/feature-libraries/flex-tree/navigation.js.map +0 -1
  665. package/dist/simple-tree/toMapTree.d.ts.map +0 -1
  666. package/dist/simple-tree/toMapTree.js.map +0 -1
  667. package/lib/feature-libraries/flex-tree/navigation.d.ts +0 -46
  668. package/lib/feature-libraries/flex-tree/navigation.d.ts.map +0 -1
  669. package/lib/feature-libraries/flex-tree/navigation.js +0 -97
  670. package/lib/feature-libraries/flex-tree/navigation.js.map +0 -1
  671. package/lib/simple-tree/toMapTree.d.ts.map +0 -1
  672. package/lib/simple-tree/toMapTree.js.map +0 -1
  673. package/src/feature-libraries/flex-tree/navigation.ts +0 -121
@@ -12,49 +12,145 @@ import {
12
12
  type FieldKey,
13
13
  type ITreeCursor,
14
14
  type MapTree,
15
+ type NodeData,
15
16
  aboveRootPlaceholder,
16
17
  detachedFieldAsKey,
17
18
  mapCursorField,
18
19
  rootField,
20
+ rootFieldKey,
19
21
  } from "../core/index.js";
20
22
 
21
23
  import {
22
24
  type CursorAdapter,
23
25
  type CursorWithNode,
26
+ type Field,
24
27
  stackTreeFieldCursor,
25
28
  stackTreeNodeCursor,
26
29
  } from "./treeCursorUtils.js";
30
+ import type { requireAssignableTo } from "../util/index.js";
31
+
32
+ /**
33
+ * A generic variant of {@link MapTree} that can be used to strongly type trees implementing a MapTree-like API.
34
+ * @remarks
35
+ * Due to how TypeScript handles recursive generic types, explicitly named extension interfaces work best for parameterizing this, and a default type parameter can't be provided.
36
+ * @see {@link MinimalMapTreeNodeView} for a minimal configuration of this interface.
37
+ */
38
+ export interface MapTreeNodeViewGeneric<TNode> extends NodeData {
39
+ /**
40
+ * The non-empty fields on this node.
41
+ * @remarks
42
+ * This is the subset of map needed to view the tree.
43
+ * Theoretically `Symbol.iterator` and "keys" are redundant.
44
+ */
45
+ readonly fields: MinimalFieldMap<MapTreeFieldViewGeneric<TNode>>;
46
+ }
47
+
48
+ /**
49
+ * A minimal map for the fields of a {@link MapTreeNodeViewGeneric}.
50
+ * @remarks
51
+ * Subset of map, so can be implemented by `Map<FieldKey, TField>`.
52
+ */
53
+ export interface MinimalFieldMap<TField> {
54
+ [Symbol.iterator]: () => Iterator<[FieldKey, TField]>;
55
+ get: (key: FieldKey) => TField | undefined;
56
+ }
57
+
58
+ /**
59
+ * A field in {@link MapTreeNodeViewGeneric}.
60
+ * @remarks
61
+ * Subset of array, so can be implemented by `TNode[]`.
62
+ */
63
+ export interface MapTreeFieldViewGeneric<TNode> {
64
+ readonly [Symbol.iterator]: () => Iterator<TNode>;
65
+ readonly length: number;
66
+ }
67
+
68
+ /**
69
+ * Like {@link MapTree} but with the minimal properties needed for reading.
70
+ */
71
+ export interface MinimalMapTreeNodeView
72
+ extends MapTreeNodeViewGeneric<MinimalMapTreeNodeView> {}
73
+
74
+ {
75
+ // Check that these interfaces are subsets of MapTree as intended:
76
+ type _check1 = requireAssignableTo<MapTree, MinimalMapTreeNodeView>;
77
+ type _check2 = requireAssignableTo<MapTree, MapTreeNodeViewGeneric<MapTree>>;
78
+ }
27
79
 
28
80
  /**
29
81
  * Returns an {@link ITreeCursorSynchronous} in nodes mode for a single {@link MapTree}.
30
82
  */
31
- export function cursorForMapTreeNode(root: MapTree): CursorWithNode<MapTree> {
32
- return stackTreeNodeCursor(adapter, root);
83
+ export function cursorForMapTreeNode<T extends MapTreeNodeViewGeneric<T>>(
84
+ root: T,
85
+ ): CursorWithNode<T> {
86
+ // There doesn't seem to be a clean way to get TypeScript to type check this without casting
87
+ // without declaring the adapter inside this generic function and needlessly recreating it on every call.
88
+ const adapterTyped = adapter as CursorAdapter<MapTreeNodeViewGeneric<T>> as CursorAdapter<T>;
89
+ return stackTreeNodeCursor(adapterTyped, root);
90
+ }
91
+
92
+ /**
93
+ * Creates an {@link ExclusiveMapTree} with a single field and no value.
94
+ * @remarks
95
+ * This handles ensuring the field is omitted if empty, and defaults to making the node above the root.
96
+ */
97
+ export function mapTreeWithField(
98
+ children: ExclusiveMapTree[],
99
+ key = rootFieldKey,
100
+ type = aboveRootPlaceholder,
101
+ ): ExclusiveMapTree {
102
+ return {
103
+ type,
104
+ fields: mapTreeFieldsWithField(children, key),
105
+ };
106
+ }
107
+
108
+ /**
109
+ * Creates a Map suitable for use as {@link MapTree.fields} with a single field.
110
+ * @remarks
111
+ * This handles ensuring the field is omitted if empty.
112
+ */
113
+ export function mapTreeFieldsWithField<T extends readonly unknown[]>(
114
+ children: T,
115
+ key: FieldKey,
116
+ ): Map<FieldKey, T> {
117
+ return new Map(children.length === 0 ? [] : [[key, children]]);
33
118
  }
34
119
 
35
120
  /**
36
121
  * Returns an {@link ITreeCursorSynchronous} in fields mode for a MapTree field.
37
122
  */
38
- export function cursorForMapTreeField(
39
- root: readonly MapTree[],
123
+ export function cursorForMapTreeField<T extends MapTreeNodeViewGeneric<T>>(
124
+ root: readonly T[],
40
125
  detachedField: DetachedField = rootField,
41
- ): CursorWithNode<MapTree> {
126
+ ): CursorWithNode<T> {
42
127
  const key = detachedFieldAsKey(detachedField);
43
- return stackTreeFieldCursor(
44
- adapter,
45
- {
46
- type: aboveRootPlaceholder,
47
- fields: new Map([[key, root]]),
48
- },
49
- detachedField,
50
- );
128
+ const adapterTyped = adapter as unknown as CursorAdapter<T>;
129
+ const dummyRoot: MapTreeNodeViewGeneric<T> = {
130
+ type: aboveRootPlaceholder,
131
+ fields: mapTreeFieldsWithField(root, key),
132
+ };
133
+ return stackTreeFieldCursor(adapterTyped, dummyRoot as T, detachedField);
51
134
  }
52
135
 
53
- const adapter: CursorAdapter<MapTree> = {
136
+ const adapter: CursorAdapter<MinimalMapTreeNodeView> = {
54
137
  value: (node) => node.value,
55
138
  type: (node) => node.type,
56
- keysFromNode: (node) => [...node.fields.keys()], // TODO: don't convert this to array here.
57
- getFieldFromNode: (node, key) => node.fields.get(key) ?? [],
139
+ keysFromNode: (node) => Array.from(node.fields, ([key, field]) => key),
140
+ getFieldFromNode: (node, key): Field<MinimalMapTreeNodeView> => {
141
+ const field = node.fields.get(key) as
142
+ | MinimalMapTreeNodeView[]
143
+ | Iterable<MinimalMapTreeNodeView>
144
+ | undefined;
145
+ if (field === undefined) {
146
+ return [];
147
+ }
148
+ if (Array.isArray(field)) {
149
+ return field as readonly MinimalMapTreeNodeView[];
150
+ }
151
+ // TODO: this copy could be avoided by using Array.at instead of indexing in `Field`, but that requires ES2022.
152
+ return [...field] as readonly MinimalMapTreeNodeView[];
153
+ },
58
154
  };
59
155
 
60
156
  /**
@@ -79,6 +79,8 @@ export class FieldKindWithEditor<
79
79
  isNeverField(policy, originalData, {
80
80
  kind: this.identifier,
81
81
  types: originalTypes,
82
+ // Metadata is not used for this check.
83
+ persistedMetadata: undefined,
82
84
  })
83
85
  ) {
84
86
  return true;
@@ -76,7 +76,7 @@ export function makeModularChangeCodecFamily(
76
76
  ChangeEncodingContext
77
77
  >,
78
78
  fieldsCodec: FieldBatchCodec,
79
- { jsonValidator: validator }: ICodecOptions,
79
+ codecOptions: ICodecOptions,
80
80
  chunkCompressionStrategy: TreeCompressionStrategy = TreeCompressionStrategy.Compressed,
81
81
  ): ICodecFamily<ModularChangeset, ChangeEncodingContext> {
82
82
  return makeCodecFamily(
@@ -86,7 +86,7 @@ export function makeModularChangeCodecFamily(
86
86
  fieldKinds,
87
87
  revisionTagCodec,
88
88
  fieldsCodec,
89
- { jsonValidator: validator },
89
+ codecOptions,
90
90
  chunkCompressionStrategy,
91
91
  ),
92
92
  ]),
@@ -116,7 +116,7 @@ function makeModularChangeCodec(
116
116
  ChangeEncodingContext
117
117
  >,
118
118
  fieldsCodec: FieldBatchCodec,
119
- { jsonValidator: validator }: ICodecOptions,
119
+ codecOptions: ICodecOptions,
120
120
  chunkCompressionStrategy: TreeCompressionStrategy = TreeCompressionStrategy.Compressed,
121
121
  ): ModularChangeCodec {
122
122
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
@@ -125,7 +125,7 @@ function makeModularChangeCodec(
125
125
  return {
126
126
  codec,
127
127
  compiledSchema: codec.json.encodedSchema
128
- ? validator.compile(codec.json.encodedSchema)
128
+ ? codecOptions.jsonValidator.compile(codec.json.encodedSchema)
129
129
  : undefined,
130
130
  };
131
131
  };
@@ -519,7 +519,11 @@ function makeModularChangeCodec(
519
519
  },
520
520
  };
521
521
 
522
- return withSchemaValidation(EncodedModularChangeset, modularChangeCodec, validator);
522
+ return withSchemaValidation(
523
+ EncodedModularChangeset,
524
+ modularChangeCodec,
525
+ codecOptions.jsonValidator,
526
+ );
523
527
  }
524
528
 
525
529
  function getChangeHandler(
@@ -154,6 +154,9 @@ export class ObjectForest implements IEditableForest, WithBreakable {
154
154
  // Some detached fields may have multiple nodes, so we must treat them as sequences:
155
155
  kind: FieldKinds.sequence.identifier,
156
156
  types: new Set(documentRoot.map((node) => node.type)),
157
+
158
+ // Metadata is not used for schema checks
159
+ persistedMetadata: undefined,
157
160
  };
158
161
  const maybeError = isFieldInSchema(documentRoot, fieldSchema, {
159
162
  schema,
@@ -13,7 +13,7 @@ import {
13
13
  makeVersionDispatchingCodec,
14
14
  withSchemaValidation,
15
15
  } from "../../codec/index.js";
16
- import { makeSchemaCodec, type Format as FormatV1 } from "../schema-index/index.js";
16
+ import { makeSchemaCodec } from "../schema-index/index.js";
17
17
 
18
18
  import { EncodedSchemaChange } from "./schemaChangeFormat.js";
19
19
  import type { SchemaChange } from "./schemaChangeTypes.js";
@@ -25,7 +25,10 @@ import { SchemaVersion } from "../../core/index.js";
25
25
  * @returns The composed codec family.
26
26
  */
27
27
  export function makeSchemaChangeCodecs(options: ICodecOptions): ICodecFamily<SchemaChange> {
28
- return makeCodecFamily([[SchemaVersion.v1, makeSchemaChangeCodecV1(options)]]);
28
+ return makeCodecFamily([
29
+ [SchemaVersion.v1, makeSchemaChangeCodecV1(options, SchemaVersion.v1)],
30
+ [SchemaVersion.v2, makeSchemaChangeCodecV1(options, SchemaVersion.v2)],
31
+ ]);
29
32
  }
30
33
 
31
34
  /**
@@ -43,14 +46,16 @@ export function makeSchemaChangeCodec(
43
46
  }
44
47
 
45
48
  /**
46
- * Compose the v1 schema change codec.
49
+ * Compose the change codec using mostly v1 logic.
47
50
  * @param options - The codec options.
51
+ * @param schemaWriteVersion - The schema write version.
48
52
  * @returns The composed schema change codec.
49
53
  */
50
54
  function makeSchemaChangeCodecV1(
51
55
  options: ICodecOptions,
56
+ schemaWriteVersion: SchemaVersion,
52
57
  ): IJsonCodec<SchemaChange, EncodedSchemaChange> {
53
- const schemaCodec = makeSchemaCodec(options, SchemaVersion.v1);
58
+ const schemaCodec = makeSchemaCodec(options, schemaWriteVersion);
54
59
  const schemaChangeCodec: IJsonCodec<SchemaChange, EncodedSchemaChange> = {
55
60
  encode: (schemaChange) => {
56
61
  assert(
@@ -58,8 +63,8 @@ function makeSchemaChangeCodecV1(
58
63
  0x933 /* Inverse schema changes should never be transmitted */,
59
64
  );
60
65
  return {
61
- new: schemaCodec.encode(schemaChange.schema.new) as FormatV1,
62
- old: schemaCodec.encode(schemaChange.schema.old) as FormatV1,
66
+ new: schemaCodec.encode(schemaChange.schema.new),
67
+ old: schemaCodec.encode(schemaChange.schema.old),
63
68
  };
64
69
  },
65
70
  decode: (encoded) => {
@@ -4,11 +4,11 @@
4
4
  */
5
5
 
6
6
  import { type Static, Type } from "@sinclair/typebox";
7
- import { Format as FormatV1 } from "../schema-index/index.js";
7
+ import { JsonCompatibleReadOnlySchema } from "../../util/index.js";
8
8
 
9
9
  export const EncodedSchemaChange = Type.Object({
10
- new: FormatV1,
11
- old: FormatV1,
10
+ new: JsonCompatibleReadOnlySchema,
11
+ old: JsonCompatibleReadOnlySchema,
12
12
  });
13
13
 
14
14
  export type EncodedSchemaChange = Static<typeof EncodedSchemaChange>;
@@ -20,13 +20,14 @@ import {
20
20
  type TreeNodeStoredSchema,
21
21
  type TreeStoredSchema,
22
22
  decodeFieldSchema,
23
- encodeFieldSchema,
24
- type schemaFormatV1,
23
+ encodeFieldSchemaV1,
24
+ encodeFieldSchemaV2,
25
25
  storedSchemaDecodeDispatcher,
26
26
  } from "../../core/index.js";
27
27
  import { brand, type JsonCompatible } from "../../util/index.js";
28
28
 
29
29
  import { Format as FormatV1 } from "./formatV1.js";
30
+ import { Format as FormatV2 } from "./formatV2.js";
30
31
 
31
32
  /**
32
33
  * Convert a FluidClientVersion to a SchemaVersion.
@@ -62,7 +63,10 @@ export function makeSchemaCodec(
62
63
  * @returns The composed codec family.
63
64
  */
64
65
  export function makeSchemaCodecs(options: ICodecOptions): ICodecFamily<TreeStoredSchema> {
65
- return makeCodecFamily([[SchemaVersion.v1, makeSchemaCodecV1(options)]]);
66
+ return makeCodecFamily([
67
+ [SchemaVersion.v1, makeSchemaCodecV1(options)],
68
+ [SchemaVersion.v2, makeSchemaCodecV2(options)],
69
+ ]);
66
70
  }
67
71
 
68
72
  /**
@@ -74,36 +78,79 @@ export function makeSchemaCodecs(options: ICodecOptions): ICodecFamily<TreeStore
74
78
  export function encodeRepo(repo: TreeStoredSchema, version: SchemaVersion): JsonCompatible {
75
79
  switch (version) {
76
80
  case SchemaVersion.v1:
77
- return encodeRepoV1(repo);
81
+ return encodeRepoV1(repo) as JsonCompatible;
82
+ case SchemaVersion.v2:
83
+ return encodeRepoV2(repo) as JsonCompatible;
78
84
  default:
79
85
  unreachableCase(version);
80
86
  }
81
87
  }
82
88
 
83
89
  function encodeRepoV1(repo: TreeStoredSchema): FormatV1 {
84
- const nodeSchema: Record<string, schemaFormatV1.TreeNodeSchemaDataFormat> =
85
- Object.create(null);
86
- const rootFieldSchema = encodeFieldSchema(repo.rootFieldSchema);
90
+ const nodeSchema = encodeNodeSchema(repo, (schema) => schema.encodeV1());
91
+ const rootFieldSchema = encodeFieldSchemaV1(repo.rootFieldSchema);
92
+ return {
93
+ version: SchemaVersion.v1,
94
+ nodes: nodeSchema,
95
+ root: rootFieldSchema,
96
+ };
97
+ }
98
+
99
+ function encodeRepoV2(repo: TreeStoredSchema): FormatV2 {
100
+ const nodeSchema = encodeNodeSchema(repo, (schema) => schema.encodeV2());
101
+ const rootFieldSchema = encodeFieldSchemaV2(repo.rootFieldSchema);
102
+ return {
103
+ version: SchemaVersion.v2,
104
+ nodes: nodeSchema,
105
+ root: rootFieldSchema,
106
+ };
107
+ }
108
+
109
+ /**
110
+ * Shared logic for encoding node schemas.
111
+ * @param repo - The stored schema to encode.
112
+ * @param encodeValue - A function which encodes a single node schema.
113
+ * @returns The encoded node schema.
114
+ */
115
+ function encodeNodeSchema<TFormat>(
116
+ repo: TreeStoredSchema,
117
+ encodeValue: (schema: TreeNodeStoredSchema) => TFormat,
118
+ ): Record<string, TFormat> {
119
+ const nodeSchema: Record<string, TFormat> = Object.create(null);
87
120
  for (const name of [...repo.nodeSchema.keys()].sort()) {
88
121
  const schema = repo.nodeSchema.get(name) ?? fail(0xb28 /* missing schema */);
89
122
  Object.defineProperty(nodeSchema, name, {
90
123
  enumerable: true,
91
124
  configurable: true,
92
125
  writable: true,
93
- value: schema.encode(),
126
+ value: encodeValue(schema),
94
127
  });
95
128
  }
129
+
130
+ return nodeSchema;
131
+ }
132
+
133
+ function decodeV1(f: FormatV1): TreeStoredSchema {
134
+ const nodeSchema: Map<TreeNodeSchemaIdentifier, TreeNodeStoredSchema> = new Map();
135
+ for (const [key, schema] of Object.entries(f.nodes)) {
136
+ const storedSchemaDecoder = storedSchemaDecodeDispatcher.dispatch(schema);
137
+
138
+ // No metadata in v1, so pass undefined
139
+ nodeSchema.set(brand(key), storedSchemaDecoder(undefined));
140
+ }
96
141
  return {
97
- version: SchemaVersion.v1,
98
- nodes: nodeSchema,
99
- root: rootFieldSchema,
142
+ rootFieldSchema: decodeFieldSchema(f.root),
143
+ nodeSchema,
100
144
  };
101
145
  }
102
146
 
103
- function decode(f: FormatV1): TreeStoredSchema {
147
+ function decodeV2(f: FormatV2): TreeStoredSchema {
104
148
  const nodeSchema: Map<TreeNodeSchemaIdentifier, TreeNodeStoredSchema> = new Map();
105
149
  for (const [key, schema] of Object.entries(f.nodes)) {
106
- nodeSchema.set(brand(key), storedSchemaDecodeDispatcher.dispatch(schema));
150
+ const storedSchemaDecoder = storedSchemaDecodeDispatcher.dispatch(schema.kind);
151
+
152
+ // Pass in the node metadata
153
+ nodeSchema.set(brand(key), storedSchemaDecoder(schema.metadata));
107
154
  }
108
155
  return {
109
156
  rootFieldSchema: decodeFieldSchema(f.root),
@@ -119,6 +166,18 @@ function decode(f: FormatV1): TreeStoredSchema {
119
166
  function makeSchemaCodecV1(options: ICodecOptions): IJsonCodec<TreeStoredSchema, FormatV1> {
120
167
  return makeVersionedValidatedCodec(options, new Set([SchemaVersion.v1]), FormatV1, {
121
168
  encode: (data: TreeStoredSchema) => encodeRepoV1(data),
122
- decode: (data: FormatV1) => decode(data),
169
+ decode: (data: FormatV1) => decodeV1(data),
170
+ });
171
+ }
172
+
173
+ /**
174
+ * Creates a codec which performs synchronous monolithic encoding of schema content.
175
+ * @param options - Specifies common codec options, including which `validator` to use.
176
+ * @returns The codec.
177
+ */
178
+ function makeSchemaCodecV2(options: ICodecOptions): IJsonCodec<TreeStoredSchema, FormatV2> {
179
+ return makeVersionedValidatedCodec(options, new Set([SchemaVersion.v2]), FormatV2, {
180
+ encode: (data: TreeStoredSchema) => encodeRepoV2(data),
181
+ decode: (data: FormatV2) => decodeV2(data),
123
182
  });
124
183
  }
@@ -0,0 +1,30 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { type ObjectOptions, type Static, Type } from "@sinclair/typebox";
7
+
8
+ import { SchemaVersion, schemaFormatV2 } from "../../core/index.js";
9
+
10
+ const noAdditionalProps: ObjectOptions = { additionalProperties: false };
11
+
12
+ /**
13
+ * Format for encoding as json.
14
+ *
15
+ * For consistency all lists are sorted and undefined values are omitted.
16
+ *
17
+ * This chooses to use lists of named objects instead of maps:
18
+ * this choice is somewhat arbitrary, but avoids user data being used as object keys,
19
+ * which can sometimes be an issue (for example handling that for "__proto__" can require care).
20
+ * It also makes it simpler to determinately sort by keys.
21
+ */
22
+ export const Format = Type.Object(
23
+ {
24
+ version: Type.Literal(SchemaVersion.v2),
25
+ nodes: Type.Record(Type.String(), schemaFormatV2.TreeNodeSchemaDataFormat),
26
+ root: schemaFormatV2.FieldSchemaFormat,
27
+ },
28
+ noAdditionalProps,
29
+ );
30
+ export type Format = Static<typeof Format>;
@@ -9,4 +9,5 @@ export {
9
9
  makeSchemaCodecs,
10
10
  clientVersionToSchemaVersion,
11
11
  } from "./codec.js";
12
- export { Format } from "./formatV1.js";
12
+ export { Format as FormatV1 } from "./formatV1.js";
13
+ export { Format as FormatV2 } from "./formatV2.js";
@@ -51,15 +51,18 @@ export class SchemaSummarizer implements Summarizable {
51
51
  });
52
52
  }
53
53
 
54
- public getAttachSummary(
55
- stringify: SummaryElementStringifier,
56
- fullTree?: boolean,
57
- trackState?: boolean,
58
- telemetryContext?: ITelemetryContext,
59
- incrementalSummaryContext?: IExperimentalIncrementalSummaryContext | undefined,
60
- ): ISummaryTreeWithStats {
54
+ public summarize(props: {
55
+ stringify: SummaryElementStringifier;
56
+ fullTree?: boolean;
57
+ trackState?: boolean;
58
+ telemetryContext?: ITelemetryContext;
59
+ incrementalSummaryContext?: IExperimentalIncrementalSummaryContext;
60
+ }): ISummaryTreeWithStats {
61
+ const incrementalSummaryContext = props.incrementalSummaryContext;
61
62
  const builder = new SummaryTreeBuilder();
63
+ const fullTree = props.fullTree ?? false;
62
64
  if (
65
+ !fullTree &&
63
66
  incrementalSummaryContext !== undefined &&
64
67
  this.schemaIndexLastChangedSeq !== undefined &&
65
68
  incrementalSummaryContext.latestSummarySequenceNumber >= this.schemaIndexLastChangedSeq
@@ -67,7 +70,7 @@ export class SchemaSummarizer implements Summarizable {
67
70
  builder.addHandle(
68
71
  schemaStringKey,
69
72
  SummaryType.Blob,
70
- `${incrementalSummaryContext.summaryPath}/indexes/${this.key}/${schemaStringKey}`,
73
+ `${incrementalSummaryContext.summaryPath}/${schemaStringKey}`,
71
74
  );
72
75
  } else {
73
76
  const dataString = JSON.stringify(this.codec.encode(this.schema));
@@ -76,16 +79,6 @@ export class SchemaSummarizer implements Summarizable {
76
79
  return builder.getSummaryTree();
77
80
  }
78
81
 
79
- public async summarize(
80
- stringify: SummaryElementStringifier,
81
- fullTree?: boolean,
82
- trackState?: boolean,
83
- telemetryContext?: ITelemetryContext,
84
- incrementalSummaryContext?: IExperimentalIncrementalSummaryContext | undefined,
85
- ): Promise<ISummaryTreeWithStats> {
86
- throw new Error("Method not implemented.");
87
- }
88
-
89
82
  public async load(
90
83
  services: IChannelStorageService,
91
84
  parse: SummaryElementParser,
@@ -72,6 +72,11 @@ export function stackTreeFieldCursor<TNode>(
72
72
  return cursor;
73
73
  }
74
74
 
75
+ /**
76
+ * The representation of a field used by {@link CursorAdapter}.
77
+ */
78
+ export type Field<TNode> = Pick<readonly TNode[], typeof Symbol.iterator | "length" | number>;
79
+
75
80
  /**
76
81
  * Provides functionality to allow a {@link stackTreeNodeCursor} and {@link stackTreeFieldCursor} to implement cursors.
77
82
  */
@@ -91,10 +96,10 @@ export interface CursorAdapter<TNode> {
91
96
  /**
92
97
  * @returns the child nodes for the given node and key.
93
98
  */
94
- getFieldFromNode(node: TNode, key: FieldKey): readonly TNode[];
99
+ getFieldFromNode(node: TNode, key: FieldKey): Field<TNode>;
95
100
  }
96
101
 
97
- type SiblingsOrKey<TNode> = readonly TNode[] | readonly FieldKey[];
102
+ type SiblingsOrKey<TNode> = Field<TNode> | readonly FieldKey[];
98
103
 
99
104
  /**
100
105
  * A class that satisfies part of the ITreeCursorSynchronous implementation.
@@ -122,7 +127,7 @@ export abstract class SynchronousCursor {
122
127
  * 2. Support for cursors which are field cursors at the root.
123
128
  */
124
129
  class StackCursor<TNode> extends SynchronousCursor implements CursorWithNode<TNode> {
125
- public readonly [CursorMarker] = true;
130
+ public override readonly [CursorMarker] = true;
126
131
  /**
127
132
  * Might start at special root where fields are detached sequences.
128
133
  *
@@ -149,14 +154,18 @@ class StackCursor<TNode> extends SynchronousCursor implements CursorWithNode<TNo
149
154
  debugAssert(() =>
150
155
  this.mode === CursorLocationType.Fields ? true : "must be in fields mode",
151
156
  );
152
- return this.siblings[this.index] as FieldKey;
157
+ // index is kept inbounds as an invariant of the class.
158
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
159
+ return (this.siblings as readonly FieldKey[])[this.index]!;
153
160
  }
154
161
 
155
162
  private getStackedFieldKey(height: number): FieldKey {
156
163
  assert(height % 2 === 1, 0x3b8 /* must field height */);
157
164
  const siblingStack = this.siblingStack[height] ?? oob();
158
165
  const indexStack = this.indexStack[height] ?? oob();
159
- return siblingStack[indexStack] as FieldKey;
166
+ // index is kept inbounds as an invariant of the class.
167
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
168
+ return (siblingStack as readonly FieldKey[])[indexStack]!;
160
169
  }
161
170
 
162
171
  private getStackedNodeIndex(height: number): number {
@@ -166,9 +175,10 @@ class StackCursor<TNode> extends SynchronousCursor implements CursorWithNode<TNo
166
175
 
167
176
  private getStackedNode(height: number): TNode {
168
177
  const index = this.getStackedNodeIndex(height);
169
- // Test is failing when using `?? oob()` here.
178
+ // Can not use `?? oob()` since null and undefined are valid values.
179
+ // index is kept inbounds as an invariant of the class.
170
180
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
171
- return (this.siblingStack[height] as readonly TNode[])[index]!;
181
+ return (this.siblingStack[height] as Field<TNode>)[index]!;
172
182
  }
173
183
 
174
184
  public getFieldLength(): number {
@@ -358,12 +368,13 @@ class StackCursor<TNode> extends SynchronousCursor implements CursorWithNode<TNo
358
368
 
359
369
  public getNode(): TNode {
360
370
  // assert(this.mode === CursorLocationType.Nodes, "can only get node when in node");
361
- // Test is failing when using `?? oob()` here.
371
+ // Can not use `?? oob()` since null and undefined are valid values.
372
+ // index is kept inbounds as an invariant of the class.
362
373
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
363
- return (this.siblings as TNode[])[this.index]!;
374
+ return (this.siblings as Field<TNode>)[this.index]!;
364
375
  }
365
376
 
366
- private getField(): readonly TNode[] {
377
+ private getField(): Field<TNode> {
367
378
  // assert(this.mode === CursorLocationType.Fields, "can only get field when in fields");
368
379
  const parent = this.getStackedNode(this.indexStack.length - 1);
369
380
  const key: FieldKey = this.getFieldKey();
package/src/index.ts CHANGED
@@ -113,6 +113,7 @@ export {
113
113
  type TreeNodeSchemaClass,
114
114
  type SchemaCompatibilityStatus,
115
115
  type FieldProps,
116
+ type FieldPropsAlpha,
116
117
  type InternalTreeNode,
117
118
  type WithType,
118
119
  type NodeChangedData,
@@ -198,6 +199,7 @@ export {
198
199
  type LazyItem,
199
200
  type Unenforced,
200
201
  type SimpleNodeSchemaBase,
202
+ type SimpleNodeSchemaBaseAlpha,
201
203
  type SimpleTreeSchema,
202
204
  type SimpleNodeSchema,
203
205
  type SimpleFieldSchema,
@@ -215,6 +217,7 @@ export {
215
217
  type TreeBranchEvents,
216
218
  asTreeViewAlpha,
217
219
  type NodeSchemaOptions,
220
+ type NodeSchemaOptionsAlpha,
218
221
  type NodeSchemaMetadata,
219
222
  type SchemaStatics,
220
223
  type ITreeAlpha,
@@ -255,6 +258,7 @@ export { persistedToSimpleSchema } from "./shared-tree/index.js";
255
258
 
256
259
  export {
257
260
  type ICodecOptions,
261
+ type CodecWriteOptions,
258
262
  type JsonValidator,
259
263
  type SchemaValidationFunction,
260
264
  FluidClientVersion,
@@ -281,6 +285,8 @@ export type {
281
285
  PopUnion,
282
286
  JsonCompatible,
283
287
  JsonCompatibleObject,
288
+ JsonCompatibleReadOnly,
289
+ JsonCompatibleReadOnlyObject,
284
290
  } from "./util/index.js";
285
291
  export { cloneWithReplacements } from "./util/index.js";
286
292
 
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.41.0";
9
+ export const pkgVersion = "2.43.0-343119";
@@ -68,6 +68,7 @@ export function initializeContent(
68
68
  rootFieldSchema: {
69
69
  kind: FieldKinds.optional.identifier,
70
70
  types: rootSchema.types,
71
+ persistedMetadata: rootSchema.persistedMetadata,
71
72
  },
72
73
  };
73
74
  }