@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
@@ -0,0 +1,78 @@
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 { JsonCompatibleReadOnlySchema } from "../../util/index.js";
9
+ import {
10
+ FieldKindIdentifierSchema,
11
+ PersistedValueSchema,
12
+ TreeNodeSchemaIdentifierSchema,
13
+ } from "./formatV1.js";
14
+ import { unionOptions } from "../../codec/index.js";
15
+
16
+ export const PersistedMetadataFormat = Type.Optional(JsonCompatibleReadOnlySchema);
17
+
18
+ const FieldSchemaFormatBase = Type.Object({
19
+ kind: FieldKindIdentifierSchema,
20
+ types: Type.Array(TreeNodeSchemaIdentifierSchema),
21
+ metadata: PersistedMetadataFormat,
22
+ });
23
+
24
+ const noAdditionalProps: ObjectOptions = { additionalProperties: false };
25
+
26
+ export const FieldSchemaFormat = Type.Composite([FieldSchemaFormatBase], noAdditionalProps);
27
+
28
+ /**
29
+ * Format for the content of a {@link TreeNodeStoredSchema}.
30
+ *
31
+ * See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
32
+ */
33
+ export const TreeNodeSchemaUnionFormat = Type.Object(
34
+ {
35
+ /**
36
+ * Object node union member.
37
+ */
38
+ object: Type.Optional(Type.Record(Type.String(), FieldSchemaFormat)),
39
+ /**
40
+ * Map node union member.
41
+ */
42
+ map: Type.Optional(FieldSchemaFormat),
43
+ /**
44
+ * Leaf node union member.
45
+ */
46
+ leaf: Type.Optional(Type.Enum(PersistedValueSchema)),
47
+ },
48
+ unionOptions,
49
+ );
50
+
51
+ export type TreeNodeSchemaUnionFormat = Static<typeof TreeNodeSchemaUnionFormat>;
52
+
53
+ /**
54
+ * Format for {@link TreeNodeStoredSchema}.
55
+ *
56
+ * See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
57
+ */
58
+ export const TreeNodeSchemaDataFormat = Type.Object(
59
+ {
60
+ /**
61
+ * Node kind specific data.
62
+ */
63
+ kind: TreeNodeSchemaUnionFormat,
64
+
65
+ // Data in common for all TreeNode schemas:
66
+ /**
67
+ * Leaf node union member.
68
+ */
69
+ metadata: PersistedMetadataFormat,
70
+ },
71
+ noAdditionalProps,
72
+ );
73
+
74
+ export type TreeNodeSchemaDataFormat = Static<typeof TreeNodeSchemaDataFormat>;
75
+
76
+ export type FieldSchemaFormat = Static<typeof FieldSchemaFormat>;
77
+
78
+ export type PersistedMetadataFormat = Static<typeof PersistedMetadataFormat>;
@@ -18,7 +18,8 @@ export {
18
18
  ObjectNodeStoredSchema,
19
19
  MapNodeStoredSchema,
20
20
  decodeFieldSchema,
21
- encodeFieldSchema,
21
+ encodeFieldSchemaV1,
22
+ encodeFieldSchemaV2,
22
23
  storedSchemaDecodeDispatcher,
23
24
  type SchemaAndPolicy,
24
25
  type SchemaPolicy,
@@ -37,3 +38,5 @@ export type { TreeNodeSchemaIdentifier, FieldKey, FieldKindIdentifier } from "./
37
38
 
38
39
  import * as schemaFormatV1 from "./formatV1.js";
39
40
  export { schemaFormatV1 };
41
+ import * as schemaFormatV2 from "./formatV2.js";
42
+ export { schemaFormatV2 };
@@ -6,16 +6,27 @@
6
6
  import { fail } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import { DiscriminatedUnionDispatcher } from "../../codec/index.js";
9
- import { type MakeNominal, brand, invertMap } from "../../util/index.js";
9
+ import {
10
+ type JsonCompatibleReadOnlyObject,
11
+ type MakeNominal,
12
+ brand,
13
+ invertMap,
14
+ } from "../../util/index.js";
10
15
 
11
16
  import {
12
17
  type FieldKey,
13
18
  type FieldKindIdentifier,
14
- type FieldSchemaFormat,
19
+ type FieldSchemaFormat as FieldSchemaFormatV1,
15
20
  PersistedValueSchema,
16
- type TreeNodeSchemaDataFormat,
21
+ type TreeNodeSchemaDataFormat as TreeNodeSchemaDataFormatV1,
17
22
  type TreeNodeSchemaIdentifier,
18
23
  } from "./formatV1.js";
24
+ import type {
25
+ FieldSchemaFormat as FieldSchemaFormatV2,
26
+ PersistedMetadataFormat,
27
+ TreeNodeSchemaUnionFormat,
28
+ TreeNodeSchemaDataFormat as TreeNodeSchemaDataFormatV2,
29
+ } from "./formatV2.js";
19
30
  import type { Multiplicity } from "./multiplicity.js";
20
31
 
21
32
  /**
@@ -23,8 +34,14 @@ import type { Multiplicity } from "./multiplicity.js";
23
34
  */
24
35
  export enum SchemaVersion {
25
36
  v1 = 1,
37
+ /**
38
+ * Adds persisted metadata to the node schema and field schema.
39
+ */
40
+ v2 = 2,
26
41
  }
27
42
 
43
+ type FieldSchemaFormat = FieldSchemaFormatV1 | FieldSchemaFormatV2;
44
+
28
45
  /**
29
46
  * Schema for what {@link TreeLeafValue} is allowed on a Leaf node.
30
47
  * @privateRemarks
@@ -128,6 +145,15 @@ export interface TreeFieldStoredSchema {
128
145
  * If not specified, types are unconstrained.
129
146
  */
130
147
  readonly types: TreeTypeSet;
148
+
149
+ /**
150
+ * Portion of the metadata which can be persisted.
151
+ * @remarks
152
+ * Discarded when encoding to {@link SchemaFormatVersion.V1}.
153
+ * @privateRemarks
154
+ * This field corresponds to the `metadata` field in the persisted schema format.
155
+ */
156
+ readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined;
131
157
  }
132
158
 
133
159
  /**
@@ -151,6 +177,7 @@ export const storedEmptyFieldSchema: TreeFieldStoredSchema = {
151
177
  kind: brand(forbiddenFieldKindIdentifier),
152
178
  // This type set also forces the field to be empty not not allowing any types as all.
153
179
  types: new Set(),
180
+ persistedMetadata: undefined,
154
181
  };
155
182
 
156
183
  /**
@@ -164,12 +191,21 @@ export abstract class TreeNodeStoredSchema {
164
191
  protected _typeCheck!: MakeNominal;
165
192
 
166
193
  /**
167
- * @privateRemarks
168
- * Returns TreeNodeSchemaDataFormat.
169
- * This is uses an opaque type to avoid leaking these types out of the package,
170
- * and is runtime validated by the codec.
194
+ * Constructor for a TreeNodeStoredSchema.
195
+ * @param metadata - Persisted metadata for this node schema.
196
+ */
197
+ public constructor(public readonly metadata: PersistedMetadataFormat | undefined) {}
198
+
199
+ /**
200
+ * Encode in the v1 schema format.
171
201
  */
172
- public abstract encode(): TreeNodeSchemaDataFormat;
202
+ public abstract encodeV1(): TreeNodeSchemaDataFormatV1;
203
+
204
+ /**
205
+ * Encode in the v2 schema format.
206
+ * @remarks Post-condition: if metadata was specified on the input schema, it will be present in the output.
207
+ */
208
+ public abstract encodeV2(): TreeNodeSchemaDataFormatV2;
173
209
 
174
210
  /**
175
211
  * Returns the schema for the provided field.
@@ -190,11 +226,35 @@ export class ObjectNodeStoredSchema extends TreeNodeStoredSchema {
190
226
  */
191
227
  public constructor(
192
228
  public readonly objectNodeFields: ReadonlyMap<FieldKey, TreeFieldStoredSchema>,
229
+ metadata?: PersistedMetadataFormat | undefined,
193
230
  ) {
194
- super();
231
+ super(metadata);
232
+ }
233
+
234
+ public override encodeV1(): TreeNodeSchemaDataFormatV1 {
235
+ const fieldsObject: Record<string, FieldSchemaFormat> =
236
+ this.encodeFieldsObject(encodeFieldSchemaV1);
237
+
238
+ return {
239
+ object: fieldsObject,
240
+ };
241
+ }
242
+
243
+ public override encodeV2(): TreeNodeSchemaDataFormatV2 {
244
+ const fieldsObject: Record<string, FieldSchemaFormat> =
245
+ this.encodeFieldsObject(encodeFieldSchemaV2);
246
+ const kind = { object: fieldsObject };
247
+
248
+ return { kind, metadata: this.metadata };
195
249
  }
196
250
 
197
- public override encode(): TreeNodeSchemaDataFormat {
251
+ public override getFieldSchema(field: FieldKey): TreeFieldStoredSchema {
252
+ return this.objectNodeFields.get(field) ?? storedEmptyFieldSchema;
253
+ }
254
+
255
+ private encodeFieldsObject(
256
+ encodeFieldSchema: (storedFieldSchema: TreeFieldStoredSchema) => FieldSchemaFormat,
257
+ ): Record<string, FieldSchemaFormat> {
198
258
  const fieldsObject: Record<string, FieldSchemaFormat> = Object.create(null);
199
259
  // Sort fields to ensure output is identical for for equivalent schema (since field order is not considered significant).
200
260
  // This makes comparing schema easier, and ensures chunk reuse for schema summaries isn't needlessly broken.
@@ -208,13 +268,7 @@ export class ObjectNodeStoredSchema extends TreeNodeStoredSchema {
208
268
  ),
209
269
  });
210
270
  }
211
- return {
212
- object: fieldsObject,
213
- };
214
- }
215
-
216
- public override getFieldSchema(field: FieldKey): TreeFieldStoredSchema {
217
- return this.objectNodeFields.get(field) ?? storedEmptyFieldSchema;
271
+ return fieldsObject;
218
272
  }
219
273
  }
220
274
 
@@ -229,16 +283,24 @@ export class MapNodeStoredSchema extends TreeNodeStoredSchema {
229
283
  * since no nodes can ever be in schema if you use `FieldKind.Value` here
230
284
  * (that would require infinite children).
231
285
  */
232
- public constructor(public readonly mapFields: TreeFieldStoredSchema) {
233
- super();
286
+ public constructor(
287
+ public readonly mapFields: TreeFieldStoredSchema,
288
+ metadata?: PersistedMetadataFormat | undefined,
289
+ ) {
290
+ super(metadata);
234
291
  }
235
292
 
236
- public override encode(): TreeNodeSchemaDataFormat {
293
+ public override encodeV1(): TreeNodeSchemaDataFormatV1 {
237
294
  return {
238
- map: encodeFieldSchema(this.mapFields),
295
+ map: encodeFieldSchemaV1(this.mapFields),
239
296
  };
240
297
  }
241
298
 
299
+ public override encodeV2(): TreeNodeSchemaDataFormatV2 {
300
+ const kind = { map: encodeFieldSchemaV2(this.mapFields) };
301
+ return { kind, metadata: this.metadata };
302
+ }
303
+
242
304
  public override getFieldSchema(field: FieldKey): TreeFieldStoredSchema {
243
305
  return this.mapFields;
244
306
  }
@@ -260,36 +322,54 @@ export class LeafNodeStoredSchema extends TreeNodeStoredSchema {
260
322
  * This is simply one approach that can work for modeling them in the internal schema representation.
261
323
  */
262
324
  public constructor(public readonly leafValue: ValueSchema) {
263
- super();
325
+ // No metadata for leaf nodes.
326
+ super(undefined);
264
327
  }
265
328
 
266
- public override encode(): TreeNodeSchemaDataFormat {
329
+ public override encodeV1(): TreeNodeSchemaDataFormatV1 {
267
330
  return {
268
331
  leaf: encodeValueSchema(this.leafValue),
269
332
  };
270
333
  }
271
334
 
335
+ public override encodeV2(): TreeNodeSchemaDataFormatV2 {
336
+ return {
337
+ // No metadata for leaf nodes, so don't emit a metadata field.
338
+ kind: {
339
+ leaf: encodeValueSchema(this.leafValue),
340
+ },
341
+ };
342
+ }
343
+
272
344
  public override getFieldSchema(field: FieldKey): TreeFieldStoredSchema {
273
345
  return storedEmptyFieldSchema;
274
346
  }
275
347
  }
276
348
 
349
+ /**
350
+ * Decoder wrapper function for {@link TreeNodeStoredSchema} implementations.
351
+ * Curries the constructor so that the caller can inject metadata.
352
+ */
353
+ type StoredSchemaDecoder = (
354
+ metadata: PersistedMetadataFormat | undefined,
355
+ ) => TreeNodeStoredSchema;
356
+
277
357
  export const storedSchemaDecodeDispatcher: DiscriminatedUnionDispatcher<
278
- TreeNodeSchemaDataFormat,
358
+ TreeNodeSchemaUnionFormat,
279
359
  [],
280
- TreeNodeStoredSchema
360
+ StoredSchemaDecoder
281
361
  > = new DiscriminatedUnionDispatcher({
282
- leaf: (data: PersistedValueSchema) => new LeafNodeStoredSchema(decodeValueSchema(data)),
283
- object: (
284
- data: Record<TreeNodeSchemaIdentifier, FieldSchemaFormat>,
285
- ): TreeNodeStoredSchema => {
362
+ leaf: (data: PersistedValueSchema) => (metadata) =>
363
+ new LeafNodeStoredSchema(decodeValueSchema(data)),
364
+ object: (data: Record<TreeNodeSchemaIdentifier, FieldSchemaFormat>) => (metadata) => {
286
365
  const map = new Map();
287
366
  for (const [key, value] of Object.entries(data)) {
288
367
  map.set(key, decodeFieldSchema(value));
289
368
  }
290
- return new ObjectNodeStoredSchema(map);
369
+ return new ObjectNodeStoredSchema(map, metadata);
291
370
  },
292
- map: (data: FieldSchemaFormat) => new MapNodeStoredSchema(decodeFieldSchema(data)),
371
+ map: (data: FieldSchemaFormat) => (metadata) =>
372
+ new MapNodeStoredSchema(decodeFieldSchema(data), metadata),
293
373
  });
294
374
 
295
375
  const valueSchemaEncode = new Map([
@@ -310,7 +390,7 @@ function decodeValueSchema(inMemory: PersistedValueSchema): ValueSchema {
310
390
  return valueSchemaDecode.get(inMemory) ?? fail(0xae9 /* missing ValueSchema */);
311
391
  }
312
392
 
313
- export function encodeFieldSchema(schema: TreeFieldStoredSchema): FieldSchemaFormat {
393
+ export function encodeFieldSchemaV1(schema: TreeFieldStoredSchema): FieldSchemaFormatV1 {
314
394
  return {
315
395
  kind: schema.kind,
316
396
  // Types are sorted by identifier to improve stability of persisted data to increase chance of schema blob reuse.
@@ -318,11 +398,21 @@ export function encodeFieldSchema(schema: TreeFieldStoredSchema): FieldSchemaFor
318
398
  };
319
399
  }
320
400
 
321
- export function decodeFieldSchema(schema: FieldSchemaFormat): TreeFieldStoredSchema {
401
+ export function encodeFieldSchemaV2(schema: TreeFieldStoredSchema): FieldSchemaFormatV2 {
402
+ const fieldSchema: FieldSchemaFormatV1 = encodeFieldSchemaV1(schema);
403
+
404
+ // Omit metadata from the output if it is undefined
405
+ return schema.persistedMetadata !== undefined
406
+ ? { ...fieldSchema, metadata: schema.persistedMetadata }
407
+ : { ...fieldSchema };
408
+ }
409
+
410
+ export function decodeFieldSchema(schema: FieldSchemaFormatV2): TreeFieldStoredSchema {
322
411
  const out: TreeFieldStoredSchema = {
323
412
  // TODO: maybe provide actual FieldKind objects here, error on unrecognized kinds.
324
413
  kind: schema.kind,
325
414
  types: new Set(schema.types),
415
+ persistedMetadata: schema.metadata,
326
416
  };
327
417
  return out;
328
418
  }
@@ -6,7 +6,12 @@
6
6
  import { assert } from "@fluidframework/core-utils/internal";
7
7
  import type { IIdCompressor } from "@fluidframework/id-compressor";
8
8
 
9
- import { type ICodecOptions, type IJsonCodec, noopValidator } from "../../codec/index.js";
9
+ import {
10
+ type CodecWriteOptions,
11
+ FluidClientVersion,
12
+ type IJsonCodec,
13
+ noopValidator,
14
+ } from "../../codec/index.js";
10
15
  import {
11
16
  type IdAllocator,
12
17
  type JsonCompatibleReadOnly,
@@ -55,7 +60,7 @@ export class DetachedFieldIndex {
55
60
  > = new Map();
56
61
 
57
62
  private readonly codec: IJsonCodec<DetachedFieldSummaryData, Format>;
58
- private readonly options: ICodecOptions;
63
+ private readonly options: CodecWriteOptions;
59
64
 
60
65
  /**
61
66
  * The process for loading `DetachedFieldIndex` data from a summary is split into two steps:
@@ -76,9 +81,13 @@ export class DetachedFieldIndex {
76
81
  private rootIdAllocator: IdAllocator<ForestRootId>,
77
82
  private readonly revisionTagCodec: RevisionTagCodec,
78
83
  private readonly idCompressor: IIdCompressor,
79
- options?: ICodecOptions,
84
+ options?: CodecWriteOptions,
80
85
  ) {
81
- this.options = options ?? { jsonValidator: noopValidator };
86
+ this.options = options ?? {
87
+ jsonValidator: noopValidator,
88
+ oldestCompatibleClient: FluidClientVersion.v2_0,
89
+ };
90
+ // TODO: this should take in CodecWriteOptions, and use it to pick the write version.
82
91
  this.codec = makeDetachedNodeToFieldCodec(revisionTagCodec, this.options, idCompressor);
83
92
  }
84
93
 
@@ -3,6 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import { assert } from "@fluidframework/core-utils/internal";
7
+
8
+ import type { MinimalMapTreeNodeView } from "../../feature-libraries/index.js";
6
9
  import type { FieldKey } from "../schema-stored/index.js";
7
10
 
8
11
  import type { NodeData } from "./types.js";
@@ -36,17 +39,32 @@ export interface ExclusiveMapTree extends NodeData, MapTree {
36
39
  * @privateRemarks This is implemented iteratively (rather than recursively, which is much simpler)
37
40
  * to avoid the possibility of a stack overflow for very deep trees.
38
41
  */
39
- export function deepCopyMapTree(mapTree: MapTree): ExclusiveMapTree {
40
- type Next = [fields: ExclusiveMapTree["fields"], sourceFields: MapTree["fields"]];
42
+ export function deepCopyMapTree(mapTree: MinimalMapTreeNodeView): ExclusiveMapTree {
43
+ type Next = [
44
+ fields: ExclusiveMapTree["fields"],
45
+ sourceFields: MinimalMapTreeNodeView["fields"],
46
+ ];
47
+ function create(
48
+ child: MinimalMapTreeNodeView,
49
+ fields: ExclusiveMapTree["fields"],
50
+ ): ExclusiveMapTree {
51
+ return {
52
+ type: child.type,
53
+ ...(child.value !== undefined ? { value: child.value } : {}),
54
+ fields,
55
+ };
56
+ }
57
+
41
58
  const rootFields: ExclusiveMapTree["fields"] = new Map();
42
59
  const nexts: Next[] = [[rootFields, mapTree.fields]];
43
60
  for (let next = nexts.pop(); next !== undefined; next = nexts.pop()) {
44
61
  const [fields, sourceFields] = next;
45
62
  for (const [key, field] of sourceFields) {
63
+ assert(field.length > 0, 0xbb3 /* invalid map tree: empty field */);
46
64
  if (field.length > 0) {
47
65
  const newField: ExclusiveMapTree[] = [];
48
66
  for (const child of field) {
49
- const childClone: ExclusiveMapTree = { ...child, fields: new Map() };
67
+ const childClone = create(child, new Map());
50
68
  newField.push(childClone);
51
69
  nexts.push([childClone.fields, child.fields]);
52
70
  }
@@ -55,8 +73,5 @@ export function deepCopyMapTree(mapTree: MapTree): ExclusiveMapTree {
55
73
  }
56
74
  }
57
75
 
58
- return {
59
- ...mapTree,
60
- fields: rootFields,
61
- };
76
+ return create(mapTree, rootFields);
62
77
  }
@@ -5,7 +5,7 @@
5
5
 
6
6
  import type { IIdCompressor } from "@fluidframework/id-compressor";
7
7
 
8
- import type { ICodecOptions } from "../../codec/index.js";
8
+ import type { CodecWriteOptions } from "../../codec/index.js";
9
9
  import { type IdAllocator, idAllocatorFromMaxId } from "../../util/index.js";
10
10
  import type { RevisionTag, RevisionTagCodec } from "../rebase/index.js";
11
11
  import type { FieldKey } from "../schema-stored/index.js";
@@ -21,7 +21,7 @@ export function makeDetachedFieldIndex(
21
21
  prefix: string = "Temp",
22
22
  revisionTagCodec: RevisionTagCodec,
23
23
  idCompressor: IIdCompressor,
24
- options?: ICodecOptions,
24
+ options?: CodecWriteOptions,
25
25
  ): DetachedFieldIndex {
26
26
  return new DetachedFieldIndex(
27
27
  prefix,
@@ -43,13 +43,14 @@ export type BufferFormat<TEncodedShape> = (
43
43
  )[];
44
44
 
45
45
  /**
46
- * Replace shapes and identifiers in buffer and any nested arrays.
46
+ * Takes already encoded content in `buffer` and deeply searches, replacing each `IdentifierToken` and `Shape`
47
+ * with references to their encodings in the returned `EncodedFieldBatchGeneric`.
47
48
  *
48
49
  * This looks inside nested arrays (including transitively) but not inside objects.
49
50
  *
50
51
  * Note that this modifies `buffer` to avoid having to copy it.
51
52
  */
52
- export function handleShapesAndIdentifiers<TEncodedShape>(
53
+ export function updateShapesAndIdentifiersEncoding<TEncodedShape>(
53
54
  version: number,
54
55
  buffer: BufferFormat<TEncodedShape>[],
55
56
  identifierFilter: CounterFilter<string> = jsonMinimizingFilter,
@@ -68,6 +69,9 @@ export function handleShapesAndIdentifiers<TEncodedShape>(
68
69
  }
69
70
  };
70
71
 
72
+ // A collection of all arrays transitively reachable (via arrays) from buffer.
73
+ // These are all the arrays whose contents are searched for shapes and identifiers which are then replaced
74
+ // with references. This uses a breadth first traversal, but the actual order is not important.
71
75
  const arrays: BufferFormat<TEncodedShape>[] = [buffer];
72
76
  for (const array of arrays) {
73
77
  for (const item of array) {
@@ -93,9 +97,9 @@ export function handleShapesAndIdentifiers<TEncodedShape>(
93
97
 
94
98
  // Traverse shape graph, discovering and counting all shape to shape and shape to identifier references.
95
99
  {
96
- let item: Shape<TEncodedShape> | undefined;
97
- while ((item = shapeToCount.pop()) !== undefined) {
98
- item.count(identifiers, shapeDiscovered);
100
+ let shape: Shape<TEncodedShape> | undefined;
101
+ while ((shape = shapeToCount.pop()) !== undefined) {
102
+ shape.countReferencedShapesAndIdentifiers(identifiers, shapeDiscovered);
99
103
  }
100
104
  }
101
105
 
@@ -143,8 +147,8 @@ export function handleShapesAndIdentifiers<TEncodedShape>(
143
147
  * Comparison by content would be difficult due to shape containing references to other shapes.
144
148
  *
145
149
  * @privateRemarks
146
- * Unlike with identifiers, conversion from the initial form (this class / IdentifierToken) is done by the `encodeShape` method, not by general purpose logic in `handleShapesAndIdentifiers`.
147
- * For `handleShapesAndIdentifiers` to do the conversion without help from `encodeShape`,
150
+ * Unlike with identifiers, conversion from the initial form (this class / IdentifierToken) is done by the `encodeShape` method, not by general purpose logic in `updateShapesAndIdentifiersEncoding`.
151
+ * For `updateShapesAndIdentifiersEncoding` to do the conversion without help from `encodeShape`,
148
152
  * instances of this Shape class would have to either be or output an object that is identical to the `TEncodedShape` format except with all shape references as object references instead of indexes.
149
153
  * Those objects would have to be deeply traversed looking for shape objects to replace with reference indexes.
150
154
  * This is possible, but making it type safe would involve generating derived types from the `TEncodedShape` deeply replacing any shape references, as well as requiring deep traversal of all objects in the encoded output.
@@ -152,18 +156,19 @@ export function handleShapesAndIdentifiers<TEncodedShape>(
152
156
  */
153
157
  export abstract class Shape<TEncodedShape> {
154
158
  /**
155
- * Count this shape's contents.
159
+ * Enumerate all contents of this shape that can get replaced with references (for better compression/deduplication) during encoding.
160
+ * This currently includes shapes and identifiers.
156
161
  *
157
162
  * Used to discover referenced shapes (to ensure they are included in the `shapes` passed to `encodeShape`),
158
163
  * as well as count usages of shapes and identifiers for more efficient dictionary encoding. See {@link Counter}.
159
164
  *
160
- * @param shapes - must be invoked with each directly referenced shape (which must provided to `encodeShape`).
165
+ * @param shapeDiscovered - must be invoked with each directly referenced shape (which must be provided to `encodeShape`).
161
166
  * Can be invoked multiple times if a shape is referenced more than once for more efficient dictionary encoding.
162
167
  * Should not be invoked with `this` unless this shape references itself.
163
168
  */
164
- public abstract count(
169
+ public abstract countReferencedShapesAndIdentifiers(
165
170
  identifiers: Counter<string>,
166
- shapes: (shape: Shape<TEncodedShape>) => void,
171
+ shapeDiscovered: (shape: Shape<TEncodedShape>) => void,
167
172
  ): void;
168
173
 
169
174
  /**
@@ -23,7 +23,7 @@ import type { Counter, DeduplicationTable } from "./chunkCodecUtilities.js";
23
23
  import {
24
24
  type BufferFormat as BufferFormatGeneric,
25
25
  Shape as ShapeGeneric,
26
- handleShapesAndIdentifiers,
26
+ updateShapesAndIdentifiersEncoding,
27
27
  } from "./chunkEncodingGeneric.js";
28
28
  import type { FieldBatch } from "./fieldBatch.js";
29
29
  import {
@@ -55,7 +55,7 @@ export function compressedEncode(
55
55
  anyFieldEncoder.encodeField(cursor, cache, buffer);
56
56
  batchBuffer.push(buffer);
57
57
  }
58
- return handleShapesAndIdentifiers(version, batchBuffer);
58
+ return updateShapesAndIdentifiersEncoding(version, batchBuffer);
59
59
  }
60
60
 
61
61
  export type BufferFormat = BufferFormatGeneric<EncodedChunkShape>;
@@ -175,7 +175,10 @@ export class AnyShape extends ShapeGeneric<EncodedChunkShape> {
175
175
  return { d: encodedAnyShape };
176
176
  }
177
177
 
178
- public count(identifiers: Counter<string>, shapes: (shape: Shape) => void): void {}
178
+ public countReferencedShapesAndIdentifiers(
179
+ identifiers: Counter<string>,
180
+ shapeDiscovered: (shape: Shape) => void,
181
+ ): void {}
179
182
 
180
183
  public static encodeField(
181
184
  cursor: ITreeCursorSynchronous,
@@ -329,8 +332,11 @@ export class InlineArrayShape
329
332
  };
330
333
  }
331
334
 
332
- public count(identifiers: Counter<string>, shapes: (shape: Shape) => void): void {
333
- shapes(this.inner.shape);
335
+ public countReferencedShapesAndIdentifiers(
336
+ identifiers: Counter<string>,
337
+ shapeDiscovered: (shape: Shape) => void,
338
+ ): void {
339
+ shapeDiscovered(this.inner.shape);
334
340
  }
335
341
 
336
342
  public get shape(): this {
@@ -387,8 +393,11 @@ export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements
387
393
  };
388
394
  }
389
395
 
390
- public count(identifiers: Counter<string>, shapes: (shape: Shape) => void): void {
391
- shapes(this.inner.shape);
396
+ public countReferencedShapesAndIdentifiers(
397
+ identifiers: Counter<string>,
398
+ shapeDiscovered: (shape: Shape) => void,
399
+ ): void {
400
+ shapeDiscovered(this.inner.shape);
392
401
  }
393
402
  }
394
403
 
@@ -121,9 +121,9 @@ export class NodeShape extends Shape<EncodedChunkShape> implements NodeEncoder {
121
121
  };
122
122
  }
123
123
 
124
- public count(
124
+ public countReferencedShapesAndIdentifiers(
125
125
  identifiers: Counter<string>,
126
- shapes: (shape: Shape<EncodedChunkShape>) => void,
126
+ shapeDiscovered: (shape: Shape<EncodedChunkShape>) => void,
127
127
  ): void {
128
128
  if (this.type !== undefined) {
129
129
  identifiers.add(this.type);
@@ -131,11 +131,11 @@ export class NodeShape extends Shape<EncodedChunkShape> implements NodeEncoder {
131
131
 
132
132
  for (const fieldEncoder of this.specializedFieldEncoders) {
133
133
  identifiers.add(fieldEncoder.key);
134
- shapes(fieldEncoder.encoder.shape);
134
+ shapeDiscovered(fieldEncoder.encoder.shape);
135
135
  }
136
136
 
137
137
  if (this.otherFieldsEncoder !== undefined) {
138
- shapes(this.otherFieldsEncoder.shape);
138
+ shapeDiscovered(this.otherFieldsEncoder.shape);
139
139
  }
140
140
  }
141
141
 
@@ -434,8 +434,9 @@ export interface OptionalFieldEditBuilder<TContent> {
434
434
  }
435
435
 
436
436
  /**
437
+ * Edit builder for the sequence field kind.
437
438
  */
438
- export interface SequenceFieldEditBuilder<TContent> {
439
+ export interface SequenceFieldEditBuilder<TContent, TRemoved = void> {
439
440
  /**
440
441
  * Issues a change which inserts the `newContent` at the given `index`.
441
442
  * @param index - the index at which to insert the `newContent`.
@@ -448,7 +449,7 @@ export interface SequenceFieldEditBuilder<TContent> {
448
449
  * @param index - The index of the first removed element.
449
450
  * @param count - The number of elements to remove.
450
451
  */
451
- remove(index: number, count: number): void;
452
+ remove(index: number, count: number): TRemoved;
452
453
  }
453
454
 
454
455
  /**