@fluidframework/tree 2.53.0 → 2.60.0

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 (424) hide show
  1. package/.eslintrc.cjs +0 -19
  2. package/.mocharc.customBenchmarks.cjs +1 -9
  3. package/CHANGELOG.md +56 -0
  4. package/api-report/tree.alpha.api.md +50 -36
  5. package/api-report/tree.beta.api.md +15 -1
  6. package/api-report/{tree.legacy.alpha.api.md → tree.legacy.beta.api.md} +5 -5
  7. package/api-report/tree.legacy.public.api.md +1 -1
  8. package/api-report/tree.public.api.md +1 -1
  9. package/dist/alpha.d.ts +8 -2
  10. package/dist/beta.d.ts +3 -0
  11. package/dist/codec/codec.d.ts +43 -6
  12. package/dist/codec/codec.d.ts.map +1 -1
  13. package/dist/codec/codec.js +22 -2
  14. package/dist/codec/codec.js.map +1 -1
  15. package/dist/codec/index.d.ts +1 -1
  16. package/dist/codec/index.d.ts.map +1 -1
  17. package/dist/codec/index.js +4 -1
  18. package/dist/codec/index.js.map +1 -1
  19. package/dist/external-utilities/index.d.ts +1 -1
  20. package/dist/external-utilities/index.d.ts.map +1 -1
  21. package/dist/external-utilities/index.js +2 -1
  22. package/dist/external-utilities/index.js.map +1 -1
  23. package/dist/external-utilities/typeboxValidator.d.ts +6 -1
  24. package/dist/external-utilities/typeboxValidator.d.ts.map +1 -1
  25. package/dist/external-utilities/typeboxValidator.js +7 -1
  26. package/dist/external-utilities/typeboxValidator.js.map +1 -1
  27. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +10 -1
  28. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  29. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +28 -5
  30. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  31. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +19 -2
  32. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  33. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +10 -2
  34. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  35. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +59 -4
  36. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  37. package/dist/feature-libraries/chunked-forest/codec/codecs.js +9 -2
  38. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  39. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +46 -8
  40. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  41. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +91 -16
  42. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  43. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +14 -0
  44. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  45. package/dist/feature-libraries/chunked-forest/codec/format.js +10 -1
  46. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  47. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  48. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  49. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  50. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +8 -3
  51. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +17 -6
  53. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  55. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  56. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  57. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  58. package/dist/feature-libraries/forest-summary/codec.js +3 -0
  59. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  60. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +13 -8
  61. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  62. package/dist/feature-libraries/forest-summary/forestSummarizer.js +76 -38
  63. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  64. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +178 -0
  65. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -0
  66. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +322 -0
  67. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -0
  68. package/dist/feature-libraries/forest-summary/index.d.ts +1 -1
  69. package/dist/feature-libraries/forest-summary/index.d.ts.map +1 -1
  70. package/dist/feature-libraries/forest-summary/index.js +2 -1
  71. package/dist/feature-libraries/forest-summary/index.js.map +1 -1
  72. package/dist/feature-libraries/index.d.ts +1 -1
  73. package/dist/feature-libraries/index.d.ts.map +1 -1
  74. package/dist/feature-libraries/index.js +2 -1
  75. package/dist/feature-libraries/index.js.map +1 -1
  76. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  77. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  78. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -1
  79. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  80. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +6 -9
  81. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  82. package/dist/feature-libraries/treeCompressionUtils.d.ts +15 -0
  83. package/dist/feature-libraries/treeCompressionUtils.d.ts.map +1 -1
  84. package/dist/feature-libraries/treeCompressionUtils.js +16 -1
  85. package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
  86. package/dist/index.d.ts +3 -3
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +6 -2
  89. package/dist/index.js.map +1 -1
  90. package/dist/jsonDomainSchema.d.ts +1 -1
  91. package/dist/jsonDomainSchema.d.ts.map +1 -1
  92. package/dist/packageVersion.d.ts +1 -1
  93. package/dist/packageVersion.js +1 -1
  94. package/dist/packageVersion.js.map +1 -1
  95. package/dist/shared-tree/schematizingTreeView.d.ts +1 -1
  96. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  97. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  98. package/dist/shared-tree/sharedTree.d.ts +23 -6
  99. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  100. package/dist/shared-tree/sharedTree.js +4 -1
  101. package/dist/shared-tree/sharedTree.js.map +1 -1
  102. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  103. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  104. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  105. package/dist/shared-tree/tree.d.ts.map +1 -1
  106. package/dist/shared-tree/tree.js +3 -0
  107. package/dist/shared-tree/tree.js.map +1 -1
  108. package/dist/shared-tree/treeAlpha.d.ts +9 -11
  109. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  110. package/dist/shared-tree/treeAlpha.js.map +1 -1
  111. package/dist/shared-tree/treeCheckout.d.ts +2 -2
  112. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  113. package/dist/shared-tree/treeCheckout.js.map +1 -1
  114. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  115. package/dist/shared-tree-core/sharedTreeCore.js +13 -0
  116. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  117. package/dist/sharedTreeAttributes.d.ts +2 -2
  118. package/dist/sharedTreeAttributes.js +2 -2
  119. package/dist/sharedTreeAttributes.js.map +1 -1
  120. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  121. package/dist/simple-tree/api/conciseTree.js +1 -1
  122. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  123. package/dist/simple-tree/api/customTree.d.ts +39 -11
  124. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  125. package/dist/simple-tree/api/customTree.js +79 -19
  126. package/dist/simple-tree/api/customTree.js.map +1 -1
  127. package/dist/simple-tree/api/getJsonSchema.d.ts +7 -2
  128. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  129. package/dist/simple-tree/api/getJsonSchema.js +1 -0
  130. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  131. package/dist/simple-tree/api/index.d.ts +2 -1
  132. package/dist/simple-tree/api/index.d.ts.map +1 -1
  133. package/dist/simple-tree/api/index.js +4 -1
  134. package/dist/simple-tree/api/index.js.map +1 -1
  135. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +1 -1
  136. package/dist/simple-tree/api/schemaCreationUtilities.js +1 -1
  137. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  138. package/dist/simple-tree/api/schemaFactory.d.ts +9 -6
  139. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  140. package/dist/simple-tree/api/schemaFactory.js +8 -7
  141. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  142. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +13 -17
  143. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  144. package/dist/simple-tree/api/schemaFactoryAlpha.js +21 -25
  145. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  146. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +20 -0
  147. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -0
  148. package/dist/simple-tree/api/schemaFactoryBeta.js +26 -0
  149. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -0
  150. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +0 -2
  151. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  152. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +6 -3
  153. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  154. package/dist/simple-tree/api/transactionTypes.d.ts +1 -0
  155. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  156. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  157. package/dist/simple-tree/api/tree.d.ts +68 -74
  158. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  159. package/dist/simple-tree/api/tree.js.map +1 -1
  160. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  161. package/dist/simple-tree/api/verboseTree.js +3 -3
  162. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  163. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts +6 -0
  164. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -1
  165. package/dist/simple-tree/core/simpleNodeSchemaBase.js.map +1 -1
  166. package/dist/simple-tree/fieldSchema.d.ts +3 -4
  167. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  168. package/dist/simple-tree/fieldSchema.js +0 -3
  169. package/dist/simple-tree/fieldSchema.js.map +1 -1
  170. package/dist/simple-tree/index.d.ts +1 -1
  171. package/dist/simple-tree/index.d.ts.map +1 -1
  172. package/dist/simple-tree/index.js +4 -2
  173. package/dist/simple-tree/index.js.map +1 -1
  174. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  175. package/dist/simple-tree/node-kinds/record/recordNode.js +2 -3
  176. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  177. package/dist/simple-tree/simpleSchema.d.ts +12 -0
  178. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  179. package/dist/simple-tree/simpleSchema.js.map +1 -1
  180. package/dist/simple-tree/toStoredSchema.d.ts +0 -3
  181. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  182. package/dist/simple-tree/toStoredSchema.js +0 -3
  183. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  184. package/dist/tableSchema.d.ts +11 -80
  185. package/dist/tableSchema.d.ts.map +1 -1
  186. package/dist/tableSchema.js +200 -117
  187. package/dist/tableSchema.js.map +1 -1
  188. package/dist/treeFactory.d.ts +1 -2
  189. package/dist/treeFactory.d.ts.map +1 -1
  190. package/dist/treeFactory.js +1 -2
  191. package/dist/treeFactory.js.map +1 -1
  192. package/lib/alpha.d.ts +8 -2
  193. package/lib/beta.d.ts +3 -0
  194. package/lib/codec/codec.d.ts +43 -6
  195. package/lib/codec/codec.d.ts.map +1 -1
  196. package/lib/codec/codec.js +19 -1
  197. package/lib/codec/codec.js.map +1 -1
  198. package/lib/codec/index.d.ts +1 -1
  199. package/lib/codec/index.d.ts.map +1 -1
  200. package/lib/codec/index.js +1 -1
  201. package/lib/codec/index.js.map +1 -1
  202. package/lib/external-utilities/index.d.ts +1 -1
  203. package/lib/external-utilities/index.d.ts.map +1 -1
  204. package/lib/external-utilities/index.js +1 -1
  205. package/lib/external-utilities/index.js.map +1 -1
  206. package/lib/external-utilities/typeboxValidator.d.ts +6 -1
  207. package/lib/external-utilities/typeboxValidator.d.ts.map +1 -1
  208. package/lib/external-utilities/typeboxValidator.js +6 -0
  209. package/lib/external-utilities/typeboxValidator.js.map +1 -1
  210. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +10 -1
  211. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  212. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +27 -5
  213. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  214. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +19 -2
  215. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  216. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +10 -2
  217. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  218. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +59 -4
  219. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  220. package/lib/feature-libraries/chunked-forest/codec/codecs.js +10 -3
  221. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  222. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +46 -8
  223. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  224. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +87 -14
  225. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  226. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +14 -0
  227. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  228. package/lib/feature-libraries/chunked-forest/codec/format.js +9 -0
  229. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  230. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  231. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  232. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  233. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +8 -3
  234. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  235. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +18 -7
  236. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  237. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  238. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  239. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  240. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  241. package/lib/feature-libraries/forest-summary/codec.js +3 -0
  242. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  243. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +13 -8
  244. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  245. package/lib/feature-libraries/forest-summary/forestSummarizer.js +75 -37
  246. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  247. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +178 -0
  248. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -0
  249. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +318 -0
  250. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -0
  251. package/lib/feature-libraries/forest-summary/index.d.ts +1 -1
  252. package/lib/feature-libraries/forest-summary/index.d.ts.map +1 -1
  253. package/lib/feature-libraries/forest-summary/index.js +1 -1
  254. package/lib/feature-libraries/forest-summary/index.js.map +1 -1
  255. package/lib/feature-libraries/index.d.ts +1 -1
  256. package/lib/feature-libraries/index.d.ts.map +1 -1
  257. package/lib/feature-libraries/index.js +1 -1
  258. package/lib/feature-libraries/index.js.map +1 -1
  259. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  260. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  261. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +3 -3
  262. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  263. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +6 -9
  264. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  265. package/lib/feature-libraries/treeCompressionUtils.d.ts +15 -0
  266. package/lib/feature-libraries/treeCompressionUtils.d.ts.map +1 -1
  267. package/lib/feature-libraries/treeCompressionUtils.js +15 -0
  268. package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
  269. package/lib/index.d.ts +3 -3
  270. package/lib/index.d.ts.map +1 -1
  271. package/lib/index.js +4 -4
  272. package/lib/index.js.map +1 -1
  273. package/lib/jsonDomainSchema.d.ts +1 -1
  274. package/lib/jsonDomainSchema.d.ts.map +1 -1
  275. package/lib/packageVersion.d.ts +1 -1
  276. package/lib/packageVersion.js +1 -1
  277. package/lib/packageVersion.js.map +1 -1
  278. package/lib/shared-tree/schematizingTreeView.d.ts +1 -1
  279. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  280. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  281. package/lib/shared-tree/sharedTree.d.ts +23 -6
  282. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  283. package/lib/shared-tree/sharedTree.js +4 -1
  284. package/lib/shared-tree/sharedTree.js.map +1 -1
  285. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  286. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  287. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  288. package/lib/shared-tree/tree.d.ts.map +1 -1
  289. package/lib/shared-tree/tree.js +3 -0
  290. package/lib/shared-tree/tree.js.map +1 -1
  291. package/lib/shared-tree/treeAlpha.d.ts +9 -11
  292. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  293. package/lib/shared-tree/treeAlpha.js.map +1 -1
  294. package/lib/shared-tree/treeCheckout.d.ts +2 -2
  295. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  296. package/lib/shared-tree/treeCheckout.js.map +1 -1
  297. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  298. package/lib/shared-tree-core/sharedTreeCore.js +13 -0
  299. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  300. package/lib/sharedTreeAttributes.d.ts +2 -2
  301. package/lib/sharedTreeAttributes.js +2 -2
  302. package/lib/sharedTreeAttributes.js.map +1 -1
  303. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  304. package/lib/simple-tree/api/conciseTree.js +2 -2
  305. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  306. package/lib/simple-tree/api/customTree.d.ts +39 -11
  307. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  308. package/lib/simple-tree/api/customTree.js +79 -19
  309. package/lib/simple-tree/api/customTree.js.map +1 -1
  310. package/lib/simple-tree/api/getJsonSchema.d.ts +7 -2
  311. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  312. package/lib/simple-tree/api/getJsonSchema.js +1 -0
  313. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  314. package/lib/simple-tree/api/index.d.ts +2 -1
  315. package/lib/simple-tree/api/index.d.ts.map +1 -1
  316. package/lib/simple-tree/api/index.js +2 -1
  317. package/lib/simple-tree/api/index.js.map +1 -1
  318. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +1 -1
  319. package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
  320. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  321. package/lib/simple-tree/api/schemaFactory.d.ts +9 -6
  322. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  323. package/lib/simple-tree/api/schemaFactory.js +6 -6
  324. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  325. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +13 -17
  326. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  327. package/lib/simple-tree/api/schemaFactoryAlpha.js +22 -26
  328. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  329. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +20 -0
  330. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -0
  331. package/lib/simple-tree/api/schemaFactoryBeta.js +22 -0
  332. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -0
  333. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +0 -2
  334. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  335. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +6 -3
  336. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  337. package/lib/simple-tree/api/transactionTypes.d.ts +1 -0
  338. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  339. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  340. package/lib/simple-tree/api/tree.d.ts +68 -74
  341. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  342. package/lib/simple-tree/api/tree.js.map +1 -1
  343. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  344. package/lib/simple-tree/api/verboseTree.js +4 -4
  345. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  346. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts +6 -0
  347. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -1
  348. package/lib/simple-tree/core/simpleNodeSchemaBase.js.map +1 -1
  349. package/lib/simple-tree/fieldSchema.d.ts +3 -4
  350. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  351. package/lib/simple-tree/fieldSchema.js +0 -3
  352. package/lib/simple-tree/fieldSchema.js.map +1 -1
  353. package/lib/simple-tree/index.d.ts +1 -1
  354. package/lib/simple-tree/index.d.ts.map +1 -1
  355. package/lib/simple-tree/index.js +1 -1
  356. package/lib/simple-tree/index.js.map +1 -1
  357. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  358. package/lib/simple-tree/node-kinds/record/recordNode.js +2 -3
  359. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  360. package/lib/simple-tree/simpleSchema.d.ts +12 -0
  361. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  362. package/lib/simple-tree/simpleSchema.js.map +1 -1
  363. package/lib/simple-tree/toStoredSchema.d.ts +0 -3
  364. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  365. package/lib/simple-tree/toStoredSchema.js +0 -3
  366. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  367. package/lib/tableSchema.d.ts +11 -80
  368. package/lib/tableSchema.d.ts.map +1 -1
  369. package/lib/tableSchema.js +201 -118
  370. package/lib/tableSchema.js.map +1 -1
  371. package/lib/treeFactory.d.ts +1 -2
  372. package/lib/treeFactory.d.ts.map +1 -1
  373. package/lib/treeFactory.js +1 -2
  374. package/lib/treeFactory.js.map +1 -1
  375. package/package.json +22 -22
  376. package/src/codec/codec.ts +52 -7
  377. package/src/codec/index.ts +4 -0
  378. package/src/external-utilities/index.ts +1 -1
  379. package/src/external-utilities/typeboxValidator.ts +7 -1
  380. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +38 -4
  381. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -3
  382. package/src/feature-libraries/chunked-forest/codec/codecs.ts +96 -8
  383. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +123 -19
  384. package/src/feature-libraries/chunked-forest/codec/format.ts +11 -0
  385. package/src/feature-libraries/chunked-forest/codec/index.ts +4 -0
  386. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +28 -3
  387. package/src/feature-libraries/chunked-forest/index.ts +2 -0
  388. package/src/feature-libraries/forest-summary/codec.ts +3 -0
  389. package/src/feature-libraries/forest-summary/forestSummarizer.ts +118 -50
  390. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +511 -0
  391. package/src/feature-libraries/forest-summary/index.ts +1 -1
  392. package/src/feature-libraries/index.ts +5 -1
  393. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +8 -4
  394. package/src/feature-libraries/treeCompressionUtils.ts +19 -0
  395. package/src/index.ts +6 -1
  396. package/src/packageVersion.ts +1 -1
  397. package/src/shared-tree/schematizingTreeView.ts +1 -1
  398. package/src/shared-tree/sharedTree.ts +37 -4
  399. package/src/shared-tree/sharedTreeChangeFamily.ts +2 -2
  400. package/src/shared-tree/tree.ts +3 -0
  401. package/src/shared-tree/treeAlpha.ts +10 -11
  402. package/src/shared-tree/treeCheckout.ts +2 -2
  403. package/src/shared-tree-core/sharedTreeCore.ts +17 -0
  404. package/src/sharedTreeAttributes.ts +2 -2
  405. package/src/simple-tree/api/conciseTree.ts +2 -1
  406. package/src/simple-tree/api/customTree.ts +102 -32
  407. package/src/simple-tree/api/getJsonSchema.ts +7 -2
  408. package/src/simple-tree/api/index.ts +3 -0
  409. package/src/simple-tree/api/schemaCreationUtilities.ts +1 -1
  410. package/src/simple-tree/api/schemaFactory.ts +21 -14
  411. package/src/simple-tree/api/schemaFactoryAlpha.ts +29 -30
  412. package/src/simple-tree/api/schemaFactoryBeta.ts +28 -0
  413. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +7 -3
  414. package/src/simple-tree/api/transactionTypes.ts +1 -0
  415. package/src/simple-tree/api/tree.ts +75 -81
  416. package/src/simple-tree/api/verboseTree.ts +42 -39
  417. package/src/simple-tree/core/simpleNodeSchemaBase.ts +6 -0
  418. package/src/simple-tree/fieldSchema.ts +3 -4
  419. package/src/simple-tree/index.ts +3 -0
  420. package/src/simple-tree/node-kinds/record/recordNode.ts +2 -3
  421. package/src/simple-tree/simpleSchema.ts +12 -0
  422. package/src/simple-tree/toStoredSchema.ts +0 -3
  423. package/src/tableSchema.ts +261 -243
  424. package/src/treeFactory.ts +1 -2
@@ -16,6 +16,7 @@ import {
16
16
  ValueSchema,
17
17
  Multiplicity,
18
18
  identifierFieldKindIdentifier,
19
+ type FieldKey,
19
20
  } from "../../../core/index.js";
20
21
  import type { FullSchemaPolicy } from "../../modular-schema/index.js";
21
22
 
@@ -28,13 +29,19 @@ import {
28
29
  anyNodeEncoder,
29
30
  asFieldEncoder,
30
31
  compressedEncode,
32
+ incrementalFieldEncoder,
31
33
  } from "./compressedEncode.js";
32
34
  import type { FieldBatch } from "./fieldBatch.js";
33
35
  import { type EncodedFieldBatch, type EncodedValueShape, SpecialField } from "./format.js";
36
+ import type { IncrementalEncoder } from "./codecs.js";
34
37
  import { NodeShapeBasedEncoder } from "./nodeEncoder.js";
35
38
 
36
39
  /**
37
40
  * Encode data from `fieldBatch` in into an `EncodedChunk`.
41
+ * @remarks
42
+ * If `incrementalEncoder` is provided,
43
+ * fields that support incremental encoding will encode their chunks separately via the `incrementalEncoder`.
44
+ * See {@link IncrementalEncoder} for more details.
38
45
  *
39
46
  * Optimized for encoded size and encoding performance.
40
47
  * TODO: This function should eventually also take in the root FieldSchema to more efficiently compress the nodes.
@@ -44,22 +51,28 @@ export function schemaCompressedEncode(
44
51
  policy: FullSchemaPolicy,
45
52
  fieldBatch: FieldBatch,
46
53
  idCompressor: IIdCompressor,
54
+ incrementalEncoder?: IncrementalEncoder,
47
55
  ): EncodedFieldBatch {
48
- return compressedEncode(fieldBatch, buildContext(schema, policy, idCompressor));
56
+ return compressedEncode(
57
+ fieldBatch,
58
+ buildContext(schema, policy, idCompressor, incrementalEncoder),
59
+ );
49
60
  }
50
61
 
51
62
  export function buildContext(
52
63
  storedSchema: StoredSchemaCollection,
53
64
  policy: FullSchemaPolicy,
54
65
  idCompressor: IIdCompressor,
66
+ incrementalEncoder?: IncrementalEncoder,
55
67
  ): EncoderContext {
56
68
  const context: EncoderContext = new EncoderContext(
57
69
  (fieldBuilder: FieldEncodeBuilder, schemaName: TreeNodeSchemaIdentifier) =>
58
- getNodeEncoder(fieldBuilder, storedSchema, schemaName),
70
+ getNodeEncoder(fieldBuilder, storedSchema, schemaName, incrementalEncoder),
59
71
  (nodeBuilder: NodeEncodeBuilder, fieldSchema: TreeFieldStoredSchema) =>
60
72
  getFieldEncoder(nodeBuilder, fieldSchema, context, storedSchema),
61
73
  policy.fieldKinds,
62
74
  idCompressor,
75
+ incrementalEncoder,
63
76
  );
64
77
  return context;
65
78
  }
@@ -111,6 +124,7 @@ export function getNodeEncoder(
111
124
  fieldBuilder: FieldEncodeBuilder,
112
125
  storedSchema: StoredSchemaCollection,
113
126
  schemaName: TreeNodeSchemaIdentifier,
127
+ incrementalEncoder?: IncrementalEncoder,
114
128
  ): NodeShapeBasedEncoder {
115
129
  const schema =
116
130
  storedSchema.nodeSchema.get(schemaName) ?? fail(0xb53 /* missing node schema */);
@@ -120,9 +134,20 @@ export function getNodeEncoder(
120
134
  // consider moving some optional and sequence fields to extra fields if they are commonly empty
121
135
  // to reduce encoded size.
122
136
 
137
+ const shouldEncodeFieldIncrementallyLocal = (
138
+ nodeIdentifier: TreeNodeSchemaIdentifier,
139
+ fieldKey: FieldKey,
140
+ ): boolean =>
141
+ incrementalEncoder?.shouldEncodeFieldIncrementally(nodeIdentifier, fieldKey) ?? false;
123
142
  const objectNodeFields: KeyedFieldEncoder[] = [];
124
143
  for (const [key, field] of schema.objectNodeFields ?? []) {
125
- objectNodeFields.push({ key, encoder: fieldBuilder.fieldEncoderFromSchema(field) });
144
+ const fieldEncoder = shouldEncodeFieldIncrementallyLocal(schemaName, key)
145
+ ? incrementalFieldEncoder
146
+ : fieldBuilder.fieldEncoderFromSchema(field);
147
+ objectNodeFields.push({
148
+ key,
149
+ encoder: fieldEncoder,
150
+ });
126
151
  }
127
152
 
128
153
  const shape = new NodeShapeBasedEncoder(schemaName, false, objectNodeFields, undefined);
@@ -21,5 +21,7 @@ export {
21
21
  makeFieldBatchCodec,
22
22
  type FieldBatchEncodingContext,
23
23
  fluidVersionToFieldBatchCodecWriteVersion,
24
+ type IncrementalEncoderDecoder,
25
+ type ChunkReferenceId,
24
26
  } from "./codec/index.js";
25
27
  export { emptyChunk } from "./emptyChunk.js";
@@ -26,6 +26,9 @@ export function makeForestSummarizerCodec(
26
26
  fieldBatchCodec: FieldBatchCodec,
27
27
  ): ForestCodec {
28
28
  const inner = fieldBatchCodec;
29
+ // TODO: AB#41865
30
+ // This needs to be updated to support multiple versions.
31
+ // The second version will be used to enable incremental summarization.
29
32
  return makeVersionedValidatedCodec(options, new Set([1]), Format, {
30
33
  encode: (data: FieldSet, context: FieldBatchEncodingContext): Format => {
31
34
  const keys: FieldKey[] = [];
@@ -12,7 +12,6 @@ import type {
12
12
  ISummaryTreeWithStats,
13
13
  ITelemetryContext,
14
14
  } from "@fluidframework/runtime-definitions/internal";
15
- import { createSingleBlobSummary } from "@fluidframework/shared-object-base/internal";
16
15
 
17
16
  import type { CodecWriteOptions } from "../../codec/index.js";
18
17
  import {
@@ -24,6 +23,7 @@ import {
24
23
  type ITreeSubscriptionCursor,
25
24
  type RevisionTagCodec,
26
25
  TreeNavigationResult,
26
+ type TreeNodeSchemaIdentifier,
27
27
  applyDelta,
28
28
  forEachField,
29
29
  makeDetachedFieldIndex,
@@ -33,25 +33,37 @@ import type {
33
33
  SummaryElementParser,
34
34
  SummaryElementStringifier,
35
35
  } from "../../shared-tree-core/index.js";
36
- import { idAllocatorFromMaxId } from "../../util/index.js";
37
- import { chunkFieldSingle, defaultChunkPolicy } from "../chunked-forest/index.js";
36
+ import { idAllocatorFromMaxId, type JsonCompatible } from "../../util/index.js";
37
+ // eslint-disable-next-line import/no-internal-modules
38
+ import { chunkFieldSingle, defaultChunkPolicy } from "../chunked-forest/chunkTree.js";
38
39
  import type { FieldBatchCodec, FieldBatchEncodingContext } from "../chunked-forest/index.js";
39
40
 
40
41
  import { type ForestCodec, makeForestSummarizerCodec } from "./codec.js";
41
- import type { Format } from "./format.js";
42
+ import {
43
+ ForestIncrementalSummaryBehavior,
44
+ ForestIncrementalSummaryBuilder,
45
+ forestSummaryContentKey,
46
+ } from "./incrementalSummaryBuilder.js";
47
+ import { TreeCompressionStrategyExtended } from "../treeCompressionUtils.js";
48
+ import type { IFluidHandle } from "@fluidframework/core-interfaces";
49
+
42
50
  /**
43
- * The storage key for the blob in the summary containing tree data
51
+ * The key for the tree that contains the overall forest's summary tree.
52
+ * This tree is added by the parent of the forest summarizer.
53
+ * See {@link ForestIncrementalSummaryBuilder} for details on the summary structure.
44
54
  */
45
- export const treeBlobKey = "ForestTree";
55
+ export const forestSummaryKey = "Forest";
46
56
 
47
57
  /**
48
58
  * Provides methods for summarizing and loading a forest.
49
59
  */
50
60
  export class ForestSummarizer implements Summarizable {
51
- public readonly key = "Forest";
61
+ public readonly key = forestSummaryKey;
52
62
 
53
63
  private readonly codec: ForestCodec;
54
64
 
65
+ private readonly incrementalSummaryBuilder: ForestIncrementalSummaryBuilder;
66
+
55
67
  /**
56
68
  * @param encoderContext - The schema if provided here must be mutated by the caller to keep it up to date.
57
69
  */
@@ -62,19 +74,45 @@ export class ForestSummarizer implements Summarizable {
62
74
  private readonly encoderContext: FieldBatchEncodingContext,
63
75
  options: CodecWriteOptions,
64
76
  private readonly idCompressor: IIdCompressor,
77
+ shouldEncodeFieldIncrementally?: (
78
+ nodeIdentifier: TreeNodeSchemaIdentifier,
79
+ fieldKey: FieldKey,
80
+ ) => boolean,
65
81
  ) {
66
82
  // TODO: this should take in CodecWriteOptions, and use it to pick the write version.
67
83
  this.codec = makeForestSummarizerCodec(options, fieldBatchCodec);
84
+
85
+ const shouldEncodeFieldIncrementallyLocal = (
86
+ nodeIdentifier: TreeNodeSchemaIdentifier,
87
+ fieldKey: FieldKey,
88
+ ): boolean => shouldEncodeFieldIncrementally?.(nodeIdentifier, fieldKey) ?? false;
89
+ this.incrementalSummaryBuilder = new ForestIncrementalSummaryBuilder(
90
+ encoderContext.encodeType ===
91
+ TreeCompressionStrategyExtended.CompressedIncremental /* enableIncrementalSummary */,
92
+ (cursor: ITreeCursorSynchronous) => this.forest.chunkField(cursor),
93
+ shouldEncodeFieldIncrementallyLocal,
94
+ );
68
95
  }
69
96
 
70
97
  /**
71
- * Synchronous monolithic summarization of tree content.
98
+ * Summarization of the forest's tree content.
99
+ * @returns a summary tree containing the forest's tree content.
100
+ * @remarks
101
+ * If incremental summary is disabled, all the content will be added to a single summary blob.
102
+ * If incremental summary is enabled, the summary will be a tree.
103
+ * See {@link ForestIncrementalSummaryBuilder} for details of what this tree looks like.
72
104
  *
73
105
  * TODO: when perf matters, this should be replaced with a chunked async version using a binary format.
74
- *
75
- * @returns a snapshot of the forest's tree as a string.
76
106
  */
77
- private getTreeString(stringify: SummaryElementStringifier): string {
107
+ public summarize(props: {
108
+ stringify: SummaryElementStringifier;
109
+ fullTree?: boolean;
110
+ trackState?: boolean;
111
+ telemetryContext?: ITelemetryContext;
112
+ incrementalSummaryContext?: IExperimentalIncrementalSummaryContext;
113
+ }): ISummaryTreeWithStats {
114
+ const { stringify, fullTree = false, incrementalSummaryContext } = props;
115
+
78
116
  const rootCursor = this.forest.getCursorAboveDetachedFields();
79
117
  const fieldMap: Map<FieldKey, ITreeCursorSynchronous & ITreeSubscriptionCursor> =
80
118
  new Map();
@@ -89,55 +127,85 @@ export class ForestSummarizer implements Summarizable {
89
127
  );
90
128
  fieldMap.set(key, innerCursor as ITreeCursorSynchronous & ITreeSubscriptionCursor);
91
129
  });
92
- const encoded = this.codec.encode(fieldMap, this.encoderContext);
93
130
 
131
+ // Let the incremental summary builder know that we are starting a new summary.
132
+ // It returns whether incremental encoding is enabled.
133
+ const incrementalSummaryBehavior = this.incrementalSummaryBuilder.startSummary({
134
+ fullTree,
135
+ incrementalSummaryContext,
136
+ stringify,
137
+ });
138
+ const encoderContext: FieldBatchEncodingContext = {
139
+ ...this.encoderContext,
140
+ incrementalEncoderDecoder:
141
+ incrementalSummaryBehavior === ForestIncrementalSummaryBehavior.Incremental
142
+ ? this.incrementalSummaryBuilder
143
+ : undefined,
144
+ };
145
+ const encoded = this.codec.encode(fieldMap, encoderContext);
94
146
  fieldMap.forEach((value) => value.free());
95
- return stringify(encoded);
96
- }
97
147
 
98
- public summarize(props: {
99
- stringify: SummaryElementStringifier;
100
- fullTree?: boolean;
101
- trackState?: boolean;
102
- telemetryContext?: ITelemetryContext;
103
- incrementalSummaryContext?: IExperimentalIncrementalSummaryContext;
104
- }): ISummaryTreeWithStats {
105
- return createSingleBlobSummary(treeBlobKey, this.getTreeString(props.stringify));
148
+ return this.incrementalSummaryBuilder.completeSummary({
149
+ incrementalSummaryContext,
150
+ forestSummaryContent: stringify(encoded),
151
+ });
106
152
  }
107
153
 
108
154
  public async load(
109
155
  services: IChannelStorageService,
110
156
  parse: SummaryElementParser,
111
157
  ): Promise<void> {
112
- if (await services.contains(treeBlobKey)) {
113
- const treeBuffer = await services.readBlob(treeBlobKey);
158
+ // The contents of the top-level forest must be present under a summary blob named `forestSummaryContentKey`.
159
+ // If the summary was generated as `ForestIncrementalSummaryBehavior.SingleBlob`, this blob will contain all
160
+ // of forest's contents.
161
+ // If the summary was generated as `ForestIncrementalSummaryBehavior.Incremental`, this blob will contain only
162
+ // the top-level forest node's contents.
163
+ // The contents of the incremental chunks will be in separate tree nodes and will be read later during decoding.
164
+ assert(
165
+ await services.contains(forestSummaryContentKey),
166
+ 0xc21 /* Forest summary content missing in snapshot */,
167
+ );
168
+
169
+ const readAndParseBlob = async <T extends JsonCompatible<IFluidHandle>>(
170
+ id: string,
171
+ ): Promise<T> => {
172
+ const treeBuffer = await services.readBlob(id);
114
173
  const treeBufferString = bufferToString(treeBuffer, "utf8");
115
- // TODO: this code is parsing data without an optional validator, this should be defined in a typebox schema as part of the
116
- // forest summary format.
117
- const fields = this.codec.decode(parse(treeBufferString) as Format, this.encoderContext);
118
- const allocator = idAllocatorFromMaxId();
119
- const fieldChanges: [FieldKey, DeltaFieldChanges][] = [];
120
- const build: DeltaDetachedNodeBuild[] = [];
121
- for (const [fieldKey, field] of fields) {
122
- const chunked = chunkFieldSingle(field, {
123
- policy: defaultChunkPolicy,
124
- idCompressor: this.idCompressor,
125
- });
126
- const buildId = { minor: allocator.allocate(chunked.topLevelLength) };
127
- build.push({
128
- id: buildId,
129
- trees: chunked,
130
- });
131
- fieldChanges.push([fieldKey, [{ count: chunked.topLevelLength, attach: buildId }]]);
132
- }
133
-
134
- assert(this.forest.isEmpty, 0x797 /* forest must be empty */);
135
- applyDelta(
136
- { build, fields: new Map(fieldChanges) },
137
- undefined,
138
- this.forest,
139
- makeDetachedFieldIndex("init", this.revisionTagCodec, this.idCompressor),
140
- );
174
+ return parse(treeBufferString) as T;
175
+ };
176
+
177
+ // Load the incremental summary builder so that it can download any incremental chunks in the
178
+ // snapshot.
179
+ await this.incrementalSummaryBuilder.load(services, readAndParseBlob);
180
+
181
+ // TODO: this code is parsing data without an optional validator, this should be defined in a typebox schema as part of the
182
+ // forest summary format.
183
+ const fields = this.codec.decode(await readAndParseBlob(forestSummaryContentKey), {
184
+ ...this.encoderContext,
185
+ incrementalEncoderDecoder: this.incrementalSummaryBuilder,
186
+ });
187
+ const allocator = idAllocatorFromMaxId();
188
+ const fieldChanges: [FieldKey, DeltaFieldChanges][] = [];
189
+ const build: DeltaDetachedNodeBuild[] = [];
190
+ for (const [fieldKey, field] of fields) {
191
+ const chunked = chunkFieldSingle(field, {
192
+ policy: defaultChunkPolicy,
193
+ idCompressor: this.idCompressor,
194
+ });
195
+ const buildId = { minor: allocator.allocate(chunked.topLevelLength) };
196
+ build.push({
197
+ id: buildId,
198
+ trees: chunked,
199
+ });
200
+ fieldChanges.push([fieldKey, [{ count: chunked.topLevelLength, attach: buildId }]]);
141
201
  }
202
+
203
+ assert(this.forest.isEmpty, 0x797 /* forest must be empty */);
204
+ applyDelta(
205
+ { build, fields: new Map(fieldChanges) },
206
+ undefined,
207
+ this.forest,
208
+ makeDetachedFieldIndex("init", this.revisionTagCodec, this.idCompressor),
209
+ );
142
210
  }
143
211
  }