@fluidframework/tree 2.51.0 → 2.52.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 (579) hide show
  1. package/.vscode/settings.json +0 -1
  2. package/CHANGELOG.md +43 -0
  3. package/api-report/tree.alpha.api.md +3 -2
  4. package/dist/codec/codec.d.ts +2 -1
  5. package/dist/codec/codec.d.ts.map +1 -1
  6. package/dist/codec/codec.js +4 -3
  7. package/dist/codec/codec.js.map +1 -1
  8. package/dist/core/index.d.ts +1 -1
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +3 -2
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/rebase/index.d.ts +1 -1
  13. package/dist/core/rebase/index.d.ts.map +1 -1
  14. package/dist/core/rebase/index.js +2 -1
  15. package/dist/core/rebase/index.js.map +1 -1
  16. package/dist/core/rebase/types.d.ts +3 -1
  17. package/dist/core/rebase/types.d.ts.map +1 -1
  18. package/dist/core/rebase/types.js +2 -1
  19. package/dist/core/rebase/types.js.map +1 -1
  20. package/dist/core/schema-stored/schema.d.ts +1 -23
  21. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  22. package/dist/core/schema-stored/schema.js +2 -2
  23. package/dist/core/schema-stored/schema.js.map +1 -1
  24. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  25. package/dist/core/tree/detachedFieldIndex.js +2 -3
  26. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  27. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  28. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  29. package/dist/core/tree/detachedFieldIndexCodecCommon.js +68 -0
  30. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  31. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  32. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  33. package/dist/core/tree/detachedFieldIndexCodecV1.js +55 -0
  34. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  35. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  36. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  37. package/dist/core/tree/detachedFieldIndexCodecV2.js +49 -0
  38. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  39. package/dist/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  40. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  41. package/dist/core/tree/detachedFieldIndexCodecs.js +26 -0
  42. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  43. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  44. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  45. package/dist/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +18 -13
  46. package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  47. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  48. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  49. package/dist/core/tree/detachedFieldIndexFormatV1.js +12 -0
  50. package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  51. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  52. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  53. package/dist/core/tree/detachedFieldIndexFormatV2.js +14 -0
  54. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  55. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  56. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +21 -21
  58. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  59. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  60. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  61. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  62. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  63. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  64. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  65. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +74 -61
  66. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  67. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  68. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  69. package/dist/feature-libraries/chunked-forest/codec/format.js +18 -12
  70. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  71. package/{lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts → dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  72. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  73. package/dist/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +23 -17
  74. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  75. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  76. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  77. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -22
  78. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  79. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  80. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  81. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  82. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  83. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +14 -2
  84. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  85. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  86. package/dist/feature-libraries/default-schema/defaultSchema.js +0 -2
  87. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  88. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  89. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  90. package/dist/feature-libraries/default-schema/index.js +2 -2
  91. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  92. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  93. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  94. package/dist/feature-libraries/default-schema/schemaChecker.js +31 -26
  95. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  96. package/dist/feature-libraries/index.d.ts +1 -2
  97. package/dist/feature-libraries/index.d.ts.map +1 -1
  98. package/dist/feature-libraries/index.js +2 -4
  99. package/dist/feature-libraries/index.js.map +1 -1
  100. package/dist/feature-libraries/modular-schema/comparison.d.ts +5 -6
  101. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  102. package/dist/feature-libraries/modular-schema/comparison.js +15 -16
  103. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  104. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  105. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  106. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  107. package/dist/feature-libraries/object-forest/objectForest.js +2 -3
  108. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  109. package/dist/index.d.ts +1 -1
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +6 -2
  112. package/dist/index.js.map +1 -1
  113. package/dist/packageVersion.d.ts +1 -1
  114. package/dist/packageVersion.js +1 -1
  115. package/dist/packageVersion.js.map +1 -1
  116. package/dist/shared-tree/independentView.d.ts +8 -0
  117. package/dist/shared-tree/independentView.d.ts.map +1 -1
  118. package/dist/shared-tree/independentView.js +23 -11
  119. package/dist/shared-tree/independentView.js.map +1 -1
  120. package/dist/shared-tree/schematizeTree.js +1 -1
  121. package/dist/shared-tree/schematizeTree.js.map +1 -1
  122. package/dist/shared-tree/schematizingTreeView.d.ts +0 -1
  123. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  124. package/dist/shared-tree/schematizingTreeView.js +7 -10
  125. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  126. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  127. package/dist/shared-tree/sharedTree.js +1 -29
  128. package/dist/shared-tree/sharedTree.js.map +1 -1
  129. package/dist/shared-tree/treeAlpha.d.ts +20 -6
  130. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  131. package/dist/shared-tree/treeAlpha.js +9 -4
  132. package/dist/shared-tree/treeAlpha.js.map +1 -1
  133. package/dist/shared-tree/treeCheckout.d.ts +2 -1
  134. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  135. package/dist/shared-tree/treeCheckout.js +32 -0
  136. package/dist/shared-tree/treeCheckout.js.map +1 -1
  137. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  138. package/dist/shared-tree-core/branch.js +1 -1
  139. package/dist/shared-tree-core/branch.js.map +1 -1
  140. package/dist/simple-tree/api/conciseTree.d.ts +2 -2
  141. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  142. package/dist/simple-tree/api/conciseTree.js +6 -6
  143. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  144. package/dist/simple-tree/api/configuration.d.ts +8 -2
  145. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  146. package/dist/simple-tree/api/configuration.js.map +1 -1
  147. package/dist/simple-tree/api/create.d.ts +8 -7
  148. package/dist/simple-tree/api/create.d.ts.map +1 -1
  149. package/dist/simple-tree/api/create.js +35 -22
  150. package/dist/simple-tree/api/create.js.map +1 -1
  151. package/dist/simple-tree/api/customTree.d.ts +25 -4
  152. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  153. package/dist/simple-tree/api/customTree.js +42 -16
  154. package/dist/simple-tree/api/customTree.js.map +1 -1
  155. package/dist/simple-tree/api/discrepancies.d.ts +98 -0
  156. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
  157. package/dist/simple-tree/api/discrepancies.js +255 -0
  158. package/dist/simple-tree/api/discrepancies.js.map +1 -0
  159. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  160. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  161. package/dist/simple-tree/api/schemaCompatibilityTester.js +18 -117
  162. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  163. package/dist/simple-tree/api/schemaFactory.d.ts +7 -4
  164. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  165. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  166. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  167. package/dist/simple-tree/api/storedSchema.js +5 -1
  168. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  169. package/dist/simple-tree/api/treeBeta.d.ts +2 -2
  170. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  171. package/dist/simple-tree/api/treeBeta.js +10 -4
  172. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  173. package/dist/simple-tree/api/verboseTree.d.ts +2 -2
  174. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  175. package/dist/simple-tree/api/verboseTree.js +15 -15
  176. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  177. package/dist/simple-tree/core/allowedTypes.d.ts +20 -4
  178. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  179. package/dist/simple-tree/core/allowedTypes.js +45 -13
  180. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  181. package/dist/simple-tree/core/context.d.ts +13 -2
  182. package/dist/simple-tree/core/context.d.ts.map +1 -1
  183. package/dist/simple-tree/core/context.js +22 -9
  184. package/dist/simple-tree/core/context.js.map +1 -1
  185. package/dist/simple-tree/core/index.d.ts +2 -2
  186. package/dist/simple-tree/core/index.d.ts.map +1 -1
  187. package/dist/simple-tree/core/index.js +3 -1
  188. package/dist/simple-tree/core/index.js.map +1 -1
  189. package/dist/simple-tree/core/treeNodeKernel.d.ts +1 -1
  190. package/dist/simple-tree/core/treeNodeKernel.js +1 -1
  191. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  192. package/dist/simple-tree/core/treeNodeValid.d.ts +1 -1
  193. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  194. package/dist/simple-tree/core/treeNodeValid.js +8 -1
  195. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  196. package/dist/simple-tree/core/walkSchema.d.ts +3 -0
  197. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  198. package/dist/simple-tree/core/walkSchema.js +2 -0
  199. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  200. package/dist/simple-tree/createContext.d.ts +2 -0
  201. package/dist/simple-tree/createContext.d.ts.map +1 -1
  202. package/dist/simple-tree/createContext.js +3 -1
  203. package/dist/simple-tree/createContext.js.map +1 -1
  204. package/dist/simple-tree/fieldSchema.d.ts +1 -0
  205. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  206. package/dist/simple-tree/fieldSchema.js +1 -0
  207. package/dist/simple-tree/fieldSchema.js.map +1 -1
  208. package/dist/simple-tree/index.d.ts +4 -4
  209. package/dist/simple-tree/index.d.ts.map +1 -1
  210. package/dist/simple-tree/index.js +7 -8
  211. package/dist/simple-tree/index.js.map +1 -1
  212. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  213. package/dist/simple-tree/node-kinds/array/arrayNode.js +1 -1
  214. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  215. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  216. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  217. package/dist/simple-tree/node-kinds/index.js +1 -2
  218. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  219. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  220. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  221. package/dist/simple-tree/node-kinds/object/index.js +1 -2
  222. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  223. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -7
  224. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  225. package/dist/simple-tree/node-kinds/object/objectNode.js +4 -18
  226. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  227. package/dist/simple-tree/prepareForInsertion.d.ts +5 -5
  228. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  229. package/dist/simple-tree/prepareForInsertion.js +9 -3
  230. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  231. package/dist/simple-tree/toStoredSchema.d.ts +3 -0
  232. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  233. package/dist/simple-tree/toStoredSchema.js +3 -0
  234. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  235. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  236. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  237. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  238. package/dist/simple-tree/walkFieldSchema.d.ts +1 -0
  239. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
  240. package/dist/simple-tree/walkFieldSchema.js +1 -0
  241. package/dist/simple-tree/walkFieldSchema.js.map +1 -1
  242. package/lib/codec/codec.d.ts +2 -1
  243. package/lib/codec/codec.d.ts.map +1 -1
  244. package/lib/codec/codec.js +4 -3
  245. package/lib/codec/codec.js.map +1 -1
  246. package/lib/core/index.d.ts +1 -1
  247. package/lib/core/index.d.ts.map +1 -1
  248. package/lib/core/index.js +1 -1
  249. package/lib/core/index.js.map +1 -1
  250. package/lib/core/rebase/index.d.ts +1 -1
  251. package/lib/core/rebase/index.d.ts.map +1 -1
  252. package/lib/core/rebase/index.js +1 -1
  253. package/lib/core/rebase/index.js.map +1 -1
  254. package/lib/core/rebase/types.d.ts +3 -1
  255. package/lib/core/rebase/types.d.ts.map +1 -1
  256. package/lib/core/rebase/types.js +1 -0
  257. package/lib/core/rebase/types.js.map +1 -1
  258. package/lib/core/schema-stored/schema.d.ts +1 -23
  259. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  260. package/lib/core/schema-stored/schema.js +2 -2
  261. package/lib/core/schema-stored/schema.js.map +1 -1
  262. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  263. package/lib/core/tree/detachedFieldIndex.js +2 -3
  264. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  265. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  266. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  267. package/lib/core/tree/detachedFieldIndexCodecCommon.js +64 -0
  268. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  269. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  270. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  271. package/lib/core/tree/detachedFieldIndexCodecV1.js +51 -0
  272. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  273. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  274. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  275. package/lib/core/tree/detachedFieldIndexCodecV2.js +45 -0
  276. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  277. package/lib/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  278. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  279. package/lib/core/tree/detachedFieldIndexCodecs.js +21 -0
  280. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  281. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  282. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  283. package/lib/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +13 -10
  284. package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  285. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  286. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  287. package/lib/core/tree/detachedFieldIndexFormatV1.js +9 -0
  288. package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  289. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  290. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  291. package/lib/core/tree/detachedFieldIndexFormatV2.js +11 -0
  292. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  293. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  294. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  295. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +19 -19
  296. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  297. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  298. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  299. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  300. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  301. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  302. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  303. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +70 -57
  304. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  305. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  306. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  307. package/lib/feature-libraries/chunked-forest/codec/format.js +17 -11
  308. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  309. package/{dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts → lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  310. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  311. package/lib/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +21 -15
  312. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  313. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  314. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  315. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +19 -19
  316. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  317. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  318. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  319. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  320. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  321. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +14 -2
  322. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  323. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  324. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -2
  325. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  326. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  327. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  328. package/lib/feature-libraries/default-schema/index.js +1 -1
  329. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  330. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  331. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  332. package/lib/feature-libraries/default-schema/schemaChecker.js +29 -24
  333. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  334. package/lib/feature-libraries/index.d.ts +1 -2
  335. package/lib/feature-libraries/index.d.ts.map +1 -1
  336. package/lib/feature-libraries/index.js +1 -2
  337. package/lib/feature-libraries/index.js.map +1 -1
  338. package/lib/feature-libraries/modular-schema/comparison.d.ts +5 -6
  339. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  340. package/lib/feature-libraries/modular-schema/comparison.js +14 -14
  341. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  342. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  343. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  344. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  345. package/lib/feature-libraries/object-forest/objectForest.js +3 -4
  346. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  347. package/lib/index.d.ts +1 -1
  348. package/lib/index.d.ts.map +1 -1
  349. package/lib/index.js +2 -2
  350. package/lib/index.js.map +1 -1
  351. package/lib/packageVersion.d.ts +1 -1
  352. package/lib/packageVersion.js +1 -1
  353. package/lib/packageVersion.js.map +1 -1
  354. package/lib/shared-tree/independentView.d.ts +8 -0
  355. package/lib/shared-tree/independentView.d.ts.map +1 -1
  356. package/lib/shared-tree/independentView.js +21 -10
  357. package/lib/shared-tree/independentView.js.map +1 -1
  358. package/lib/shared-tree/schematizeTree.js +1 -1
  359. package/lib/shared-tree/schematizeTree.js.map +1 -1
  360. package/lib/shared-tree/schematizingTreeView.d.ts +0 -1
  361. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  362. package/lib/shared-tree/schematizingTreeView.js +8 -11
  363. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  364. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  365. package/lib/shared-tree/sharedTree.js +2 -30
  366. package/lib/shared-tree/sharedTree.js.map +1 -1
  367. package/lib/shared-tree/treeAlpha.d.ts +20 -6
  368. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  369. package/lib/shared-tree/treeAlpha.js +10 -5
  370. package/lib/shared-tree/treeAlpha.js.map +1 -1
  371. package/lib/shared-tree/treeCheckout.d.ts +2 -1
  372. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  373. package/lib/shared-tree/treeCheckout.js +33 -1
  374. package/lib/shared-tree/treeCheckout.js.map +1 -1
  375. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  376. package/lib/shared-tree-core/branch.js +1 -1
  377. package/lib/shared-tree-core/branch.js.map +1 -1
  378. package/lib/simple-tree/api/conciseTree.d.ts +2 -2
  379. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  380. package/lib/simple-tree/api/conciseTree.js +6 -6
  381. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  382. package/lib/simple-tree/api/configuration.d.ts +8 -2
  383. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  384. package/lib/simple-tree/api/configuration.js.map +1 -1
  385. package/lib/simple-tree/api/create.d.ts +8 -7
  386. package/lib/simple-tree/api/create.d.ts.map +1 -1
  387. package/lib/simple-tree/api/create.js +38 -25
  388. package/lib/simple-tree/api/create.js.map +1 -1
  389. package/lib/simple-tree/api/customTree.d.ts +25 -4
  390. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  391. package/lib/simple-tree/api/customTree.js +43 -17
  392. package/lib/simple-tree/api/customTree.js.map +1 -1
  393. package/lib/simple-tree/api/discrepancies.d.ts +98 -0
  394. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
  395. package/lib/simple-tree/{discrepancies.js → api/discrepancies.js} +80 -206
  396. package/lib/simple-tree/api/discrepancies.js.map +1 -0
  397. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  398. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  399. package/lib/simple-tree/api/schemaCompatibilityTester.js +19 -118
  400. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  401. package/lib/simple-tree/api/schemaFactory.d.ts +7 -4
  402. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  403. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  404. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  405. package/lib/simple-tree/api/storedSchema.js +6 -2
  406. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  407. package/lib/simple-tree/api/treeBeta.d.ts +2 -2
  408. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  409. package/lib/simple-tree/api/treeBeta.js +8 -2
  410. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  411. package/lib/simple-tree/api/verboseTree.d.ts +2 -2
  412. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  413. package/lib/simple-tree/api/verboseTree.js +9 -9
  414. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  415. package/lib/simple-tree/core/allowedTypes.d.ts +20 -4
  416. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  417. package/lib/simple-tree/core/allowedTypes.js +42 -12
  418. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  419. package/lib/simple-tree/core/context.d.ts +13 -2
  420. package/lib/simple-tree/core/context.d.ts.map +1 -1
  421. package/lib/simple-tree/core/context.js +22 -9
  422. package/lib/simple-tree/core/context.js.map +1 -1
  423. package/lib/simple-tree/core/index.d.ts +2 -2
  424. package/lib/simple-tree/core/index.d.ts.map +1 -1
  425. package/lib/simple-tree/core/index.js +2 -2
  426. package/lib/simple-tree/core/index.js.map +1 -1
  427. package/lib/simple-tree/core/treeNodeKernel.d.ts +1 -1
  428. package/lib/simple-tree/core/treeNodeKernel.js +1 -1
  429. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  430. package/lib/simple-tree/core/treeNodeValid.d.ts +1 -1
  431. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  432. package/lib/simple-tree/core/treeNodeValid.js +8 -1
  433. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  434. package/lib/simple-tree/core/walkSchema.d.ts +3 -0
  435. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  436. package/lib/simple-tree/core/walkSchema.js +2 -0
  437. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  438. package/lib/simple-tree/createContext.d.ts +2 -0
  439. package/lib/simple-tree/createContext.d.ts.map +1 -1
  440. package/lib/simple-tree/createContext.js +3 -1
  441. package/lib/simple-tree/createContext.js.map +1 -1
  442. package/lib/simple-tree/fieldSchema.d.ts +1 -0
  443. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  444. package/lib/simple-tree/fieldSchema.js +1 -0
  445. package/lib/simple-tree/fieldSchema.js.map +1 -1
  446. package/lib/simple-tree/index.d.ts +4 -4
  447. package/lib/simple-tree/index.d.ts.map +1 -1
  448. package/lib/simple-tree/index.js +4 -4
  449. package/lib/simple-tree/index.js.map +1 -1
  450. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  451. package/lib/simple-tree/node-kinds/array/arrayNode.js +1 -1
  452. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  453. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  454. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  455. package/lib/simple-tree/node-kinds/index.js +1 -1
  456. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  457. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  458. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  459. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  460. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  461. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -7
  462. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  463. package/lib/simple-tree/node-kinds/object/objectNode.js +3 -16
  464. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  465. package/lib/simple-tree/prepareForInsertion.d.ts +5 -5
  466. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  467. package/lib/simple-tree/prepareForInsertion.js +11 -5
  468. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  469. package/lib/simple-tree/toStoredSchema.d.ts +3 -0
  470. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  471. package/lib/simple-tree/toStoredSchema.js +3 -0
  472. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  473. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  474. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  475. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
  476. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  477. package/lib/simple-tree/walkFieldSchema.d.ts +1 -0
  478. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
  479. package/lib/simple-tree/walkFieldSchema.js +1 -0
  480. package/lib/simple-tree/walkFieldSchema.js.map +1 -1
  481. package/package.json +23 -23
  482. package/src/codec/codec.ts +4 -3
  483. package/src/core/index.ts +2 -0
  484. package/src/core/rebase/index.ts +2 -0
  485. package/src/core/rebase/types.ts +4 -0
  486. package/src/core/schema-stored/schema.ts +2 -26
  487. package/src/core/tree/detachedFieldIndex.ts +4 -6
  488. package/src/core/tree/detachedFieldIndexCodecCommon.ts +87 -0
  489. package/src/core/tree/{detachedFieldIndexCodec.ts → detachedFieldIndexCodecV1.ts} +22 -68
  490. package/src/core/tree/detachedFieldIndexCodecV2.ts +72 -0
  491. package/src/core/tree/detachedFieldIndexCodecs.ts +44 -0
  492. package/src/core/tree/{detachedFieldIndexFormat.ts → detachedFieldIndexFormatCommon.ts} +32 -23
  493. package/src/core/tree/detachedFieldIndexFormatV1.ts +15 -0
  494. package/src/core/tree/detachedFieldIndexFormatV2.ts +17 -0
  495. package/src/feature-libraries/chunked-forest/codec/README.md +1 -1
  496. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +25 -25
  497. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -6
  498. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +96 -73
  499. package/src/feature-libraries/chunked-forest/codec/format.ts +20 -14
  500. package/src/feature-libraries/chunked-forest/codec/{nodeShape.ts → nodeEncoder.ts} +23 -17
  501. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +34 -34
  502. package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +5 -5
  503. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +10 -0
  504. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -2
  505. package/src/feature-libraries/default-schema/index.ts +1 -1
  506. package/src/feature-libraries/default-schema/schemaChecker.ts +47 -30
  507. package/src/feature-libraries/index.ts +1 -3
  508. package/src/feature-libraries/modular-schema/comparison.ts +14 -29
  509. package/src/feature-libraries/object-forest/objectForest.ts +10 -6
  510. package/src/index.ts +5 -0
  511. package/src/packageVersion.ts +1 -1
  512. package/src/shared-tree/independentView.ts +45 -19
  513. package/src/shared-tree/schematizeTree.ts +1 -1
  514. package/src/shared-tree/schematizingTreeView.ts +16 -13
  515. package/src/shared-tree/sharedTree.ts +2 -42
  516. package/src/shared-tree/treeAlpha.ts +30 -18
  517. package/src/shared-tree/treeCheckout.ts +54 -10
  518. package/src/shared-tree-core/branch.ts +1 -6
  519. package/src/simple-tree/api/conciseTree.ts +9 -7
  520. package/src/simple-tree/api/configuration.ts +8 -2
  521. package/src/simple-tree/api/create.ts +49 -36
  522. package/src/simple-tree/api/customTree.ts +59 -20
  523. package/src/simple-tree/{discrepancies.ts → api/discrepancies.ts} +128 -303
  524. package/src/simple-tree/api/schemaCompatibilityTester.ts +27 -151
  525. package/src/simple-tree/api/schemaFactory.ts +7 -4
  526. package/src/simple-tree/api/storedSchema.ts +6 -9
  527. package/src/simple-tree/api/treeBeta.ts +17 -4
  528. package/src/simple-tree/api/verboseTree.ts +17 -8
  529. package/src/simple-tree/core/allowedTypes.ts +54 -21
  530. package/src/simple-tree/core/context.ts +24 -22
  531. package/src/simple-tree/core/index.ts +2 -1
  532. package/src/simple-tree/core/treeNodeKernel.ts +1 -1
  533. package/src/simple-tree/core/treeNodeValid.ts +9 -2
  534. package/src/simple-tree/core/walkSchema.ts +3 -0
  535. package/src/simple-tree/createContext.ts +6 -1
  536. package/src/simple-tree/fieldSchema.ts +1 -0
  537. package/src/simple-tree/index.ts +5 -10
  538. package/src/simple-tree/node-kinds/array/arrayNode.ts +32 -19
  539. package/src/simple-tree/node-kinds/index.ts +0 -1
  540. package/src/simple-tree/node-kinds/object/index.ts +0 -1
  541. package/src/simple-tree/node-kinds/object/objectNode.ts +9 -27
  542. package/src/simple-tree/prepareForInsertion.ts +17 -9
  543. package/src/simple-tree/toStoredSchema.ts +3 -0
  544. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +6 -2
  545. package/src/simple-tree/walkFieldSchema.ts +1 -0
  546. package/dist/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  547. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  548. package/dist/core/tree/detachedFieldIndexCodec.js +0 -100
  549. package/dist/core/tree/detachedFieldIndexCodec.js.map +0 -1
  550. package/dist/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  551. package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  552. package/dist/core/tree/detachedFieldIndexFormat.js.map +0 -1
  553. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  554. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  555. package/dist/feature-libraries/initializeForest.d.ts +0 -18
  556. package/dist/feature-libraries/initializeForest.d.ts.map +0 -1
  557. package/dist/feature-libraries/initializeForest.js +0 -35
  558. package/dist/feature-libraries/initializeForest.js.map +0 -1
  559. package/dist/simple-tree/discrepancies.d.ts +0 -167
  560. package/dist/simple-tree/discrepancies.d.ts.map +0 -1
  561. package/dist/simple-tree/discrepancies.js +0 -382
  562. package/dist/simple-tree/discrepancies.js.map +0 -1
  563. package/lib/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  564. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  565. package/lib/core/tree/detachedFieldIndexCodec.js +0 -96
  566. package/lib/core/tree/detachedFieldIndexCodec.js.map +0 -1
  567. package/lib/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  568. package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  569. package/lib/core/tree/detachedFieldIndexFormat.js.map +0 -1
  570. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  571. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  572. package/lib/feature-libraries/initializeForest.d.ts +0 -18
  573. package/lib/feature-libraries/initializeForest.d.ts.map +0 -1
  574. package/lib/feature-libraries/initializeForest.js +0 -31
  575. package/lib/feature-libraries/initializeForest.js.map +0 -1
  576. package/lib/simple-tree/discrepancies.d.ts +0 -167
  577. package/lib/simple-tree/discrepancies.d.ts.map +0 -1
  578. package/lib/simple-tree/discrepancies.js.map +0 -1
  579. package/src/feature-libraries/initializeForest.ts +0 -55
@@ -19,7 +19,7 @@ A few implementations are included which make different choices here:
19
19
 
20
20
  - [uncompressedEncode.ts](uncompressedEncode.ts): the simplest implementation, which captures nothing in the shape and does no Dictionary Coding of identifiers.
21
21
  This makes for more human readable data as well as a simple reference implementation.
22
- - [compressedEncode.ts](compressedEncode.ts): some utilities for actual compressed encoding, but does not contain any advanced strategies (instead they must be provided to it via the `EncoderCache`)
22
+ - [compressedEncode.ts](compressedEncode.ts): some utilities for actual compressed encoding, but does not contain any advanced strategies (instead they must be provided to it via the `EncoderContext`)
23
23
  - [schemaBasedEncode.ts](schemaBasedEncode.ts): a strategy for compressedEncode using schema to infer commonly used shapes.
24
24
 
25
25
  ### Future Optimizations
@@ -41,9 +41,9 @@ import {
41
41
  type EncodedAnyShape,
42
42
  type EncodedChunkShape,
43
43
  type EncodedFieldBatch,
44
- type EncodedInlineArray,
45
- type EncodedNestedArray,
46
- type EncodedTreeShape,
44
+ type EncodedInlineArrayShape,
45
+ type EncodedNestedArrayShape,
46
+ type EncodedNodeShape,
47
47
  type EncodedValueShape,
48
48
  SpecialField,
49
49
  } from "./format.js";
@@ -72,17 +72,17 @@ export function decode(
72
72
 
73
73
  const decoderLibrary = new DiscriminatedUnionDispatcher<
74
74
  EncodedChunkShape,
75
- [cache: DecoderContext<EncodedChunkShape>],
75
+ [context: DecoderContext<EncodedChunkShape>],
76
76
  ChunkDecoder
77
77
  >({
78
- a(shape: EncodedNestedArray, cache): ChunkDecoder {
78
+ a(shape: EncodedNestedArrayShape, context): ChunkDecoder {
79
79
  return new NestedArrayDecoder(shape);
80
80
  },
81
- b(shape: EncodedInlineArray, cache): ChunkDecoder {
81
+ b(shape: EncodedInlineArrayShape, context): ChunkDecoder {
82
82
  return new InlineArrayDecoder(shape);
83
83
  },
84
- c(shape: EncodedTreeShape, cache): ChunkDecoder {
85
- return new TreeDecoder(shape, cache);
84
+ c(shape: EncodedNodeShape, context): ChunkDecoder {
85
+ return new NodeDecoder(shape, context);
86
86
  },
87
87
  d(shape: EncodedAnyShape): ChunkDecoder {
88
88
  return anyDecoder;
@@ -180,10 +180,10 @@ export function aggregateChunks(input: TreeChunk[]): TreeChunk {
180
180
  }
181
181
 
182
182
  /**
183
- * Decoder for {@link EncodedNestedArray}s.
183
+ * Decoder for {@link EncodedNestedArrayShape}s.
184
184
  */
185
185
  export class NestedArrayDecoder implements ChunkDecoder {
186
- public constructor(private readonly shape: EncodedNestedArray) {}
186
+ public constructor(private readonly shape: EncodedNestedArrayShape) {}
187
187
  public decode(decoders: readonly ChunkDecoder[], stream: StreamCursor): TreeChunk {
188
188
  const decoder = decoders[this.shape] ?? oob();
189
189
 
@@ -213,10 +213,10 @@ export class NestedArrayDecoder implements ChunkDecoder {
213
213
  }
214
214
 
215
215
  /**
216
- * Decoder for {@link EncodedInlineArray}s.
216
+ * Decoder for {@link EncodedInlineArrayShape}s.
217
217
  */
218
218
  export class InlineArrayDecoder implements ChunkDecoder {
219
- public constructor(private readonly shape: EncodedInlineArray) {}
219
+ public constructor(private readonly shape: EncodedInlineArrayShape) {}
220
220
  public decode(decoders: readonly ChunkDecoder[], stream: StreamCursor): TreeChunk {
221
221
  const length = this.shape.length;
222
222
  const decoder = decoders[this.shape.shape] ?? oob();
@@ -248,14 +248,14 @@ type BasicFieldDecoder = (
248
248
  ) => [FieldKey, TreeChunk];
249
249
 
250
250
  /**
251
- * Get a decoder for fields of a provided (via `shape` and `cache`) {@link EncodedChunkShape}.
251
+ * Get a decoder for fields of a provided (via `shape` and `context`) {@link EncodedChunkShape}.
252
252
  */
253
253
  function fieldDecoder(
254
- cache: DecoderContext<EncodedChunkShape>,
254
+ context: DecoderContext<EncodedChunkShape>,
255
255
  key: FieldKey,
256
256
  shape: number,
257
257
  ): BasicFieldDecoder {
258
- assertValidIndex(shape, cache.shapes);
258
+ assertValidIndex(shape, context.shapes);
259
259
  return (decoders, stream) => {
260
260
  const decoder = decoders[shape] ?? oob();
261
261
  return [key, decoder.decode(decoders, stream)];
@@ -263,30 +263,30 @@ function fieldDecoder(
263
263
  }
264
264
 
265
265
  /**
266
- * Decoder for {@link EncodedTreeShape}s.
266
+ * Decoder for {@link EncodedNodeShape}s.
267
267
  */
268
- export class TreeDecoder implements ChunkDecoder {
268
+ export class NodeDecoder implements ChunkDecoder {
269
269
  private readonly type?: TreeNodeSchemaIdentifier;
270
270
  private readonly fieldDecoders: readonly BasicFieldDecoder[];
271
271
  public constructor(
272
- private readonly shape: EncodedTreeShape,
273
- private readonly cache: DecoderContext<EncodedChunkShape>,
272
+ private readonly shape: EncodedNodeShape,
273
+ private readonly context: DecoderContext<EncodedChunkShape>,
274
274
  ) {
275
- this.type = shape.type === undefined ? undefined : cache.identifier(shape.type);
275
+ this.type = shape.type === undefined ? undefined : context.identifier(shape.type);
276
276
 
277
277
  const fieldDecoders: BasicFieldDecoder[] = [];
278
278
  for (const [fieldKey, fieldShape] of shape.fields ?? []) {
279
- const key: FieldKey = cache.identifier(fieldKey);
280
- fieldDecoders.push(fieldDecoder(cache, key, fieldShape));
279
+ const key: FieldKey = context.identifier(fieldKey);
280
+ fieldDecoders.push(fieldDecoder(context, key, fieldShape));
281
281
  }
282
282
  this.fieldDecoders = fieldDecoders;
283
283
  }
284
284
  public decode(decoders: readonly ChunkDecoder[], stream: StreamCursor): TreeChunk {
285
285
  const type: TreeNodeSchemaIdentifier =
286
- this.type ?? readStreamIdentifier(stream, this.cache);
286
+ this.type ?? readStreamIdentifier(stream, this.context);
287
287
  // TODO: Consider typechecking against stored schema in here somewhere.
288
288
 
289
- const value = readValue(stream, this.shape.value, this.cache.idDecodingContext);
289
+ const value = readValue(stream, this.shape.value, this.context.idDecodingContext);
290
290
  const fields: Map<FieldKey, TreeChunk[]> = new Map();
291
291
 
292
292
  // Helper to add fields, but with unneeded array chunks removed.
@@ -309,7 +309,7 @@ export class TreeDecoder implements ChunkDecoder {
309
309
  const decoder = decoders[this.shape.extraFields] ?? oob();
310
310
  const inner = readStreamStream(stream);
311
311
  while (inner.offset !== inner.data.length) {
312
- const key: FieldKey = readStreamIdentifier(inner, this.cache);
312
+ const key: FieldKey = readStreamIdentifier(inner, this.context);
313
313
  addField(key, decoder.decode(decoders, inner));
314
314
  }
315
315
  }
@@ -21,13 +21,17 @@ import type { EncodedFieldBatchGeneric, IdentifierOrIndex } from "./formatGeneri
21
21
  /**
22
22
  * General purpose shape based tree decoder which gets its support for specific shapes from the caller.
23
23
  */
24
- export function decode<TEncodedShape extends object, TCache>(
25
- decoderLibrary: DiscriminatedUnionDispatcher<TEncodedShape, [cache: TCache], ChunkDecoder>,
26
- cache: TCache,
24
+ export function decode<TEncodedShape extends object, TContext>(
25
+ decoderLibrary: DiscriminatedUnionDispatcher<
26
+ TEncodedShape,
27
+ [context: TContext],
28
+ ChunkDecoder
29
+ >,
30
+ context: TContext,
27
31
  batch: EncodedFieldBatchGeneric<TEncodedShape>,
28
32
  rootDecoder: ChunkDecoder,
29
33
  ): TreeChunk[] {
30
- const decoders = batch.shapes.map((shape) => decoderLibrary.dispatch(shape, cache));
34
+ const decoders = batch.shapes.map((shape) => decoderLibrary.dispatch(shape, context));
31
35
  const chunks: TreeChunk[] = [];
32
36
  for (const field of batch.data) {
33
37
  const stream = { data: field, offset: 0 };
@@ -70,12 +74,12 @@ export class DecoderContext<TEncodedShape = unknown> {
70
74
  */
71
75
  export function readStreamIdentifier<T extends string & BrandedType<string, string>>(
72
76
  stream: StreamCursor,
73
- cache: DecoderContext,
77
+ context: DecoderContext,
74
78
  ): T {
75
79
  const content = readStream(stream);
76
80
  assert(
77
81
  typeof content === "number" || typeof content === "string",
78
82
  0x73b /* content to be a number or string */,
79
83
  );
80
- return cache.identifier(content);
84
+ return context.identifier(content);
81
85
  }
@@ -30,7 +30,7 @@ import {
30
30
  type EncodedAnyShape,
31
31
  type EncodedChunkShape,
32
32
  type EncodedFieldBatch,
33
- type EncodedNestedArray,
33
+ type EncodedNestedArrayShape,
34
34
  type EncodedValueShape,
35
35
  SpecialField,
36
36
  version,
@@ -41,18 +41,18 @@ import {
41
41
  *
42
42
  * Optimized for encoded size and encoding performance.
43
43
  *
44
- * Most of the compression strategy comes from the policy provided via `cache`.
44
+ * Most of the compression strategy comes from the policy provided via `context`.
45
45
  */
46
46
  export function compressedEncode(
47
47
  fieldBatch: FieldBatch,
48
- cache: EncoderCache,
48
+ context: EncoderContext,
49
49
  ): EncodedFieldBatch {
50
50
  const batchBuffer: BufferFormat[] = [];
51
51
 
52
52
  // Populate buffer, including shape and identifier references
53
53
  for (const cursor of fieldBatch) {
54
54
  const buffer: BufferFormat = [];
55
- anyFieldEncoder.encodeField(cursor, cache, buffer);
55
+ anyFieldEncoder.encodeField(cursor, context, buffer);
56
56
  batchBuffer.push(buffer);
57
57
  }
58
58
  return updateShapesAndIdentifiersEncoding(version, batchBuffer);
@@ -91,7 +91,7 @@ export interface NodeEncoder extends Encoder {
91
91
  */
92
92
  encodeNode(
93
93
  cursor: ITreeCursorSynchronous,
94
- cache: EncoderCache,
94
+ context: EncoderContext,
95
95
  outputBuffer: BufferFormat,
96
96
  ): void;
97
97
  }
@@ -105,7 +105,7 @@ export interface NodesEncoder extends Encoder {
105
105
  */
106
106
  encodeNodes(
107
107
  cursor: ITreeCursorSynchronous,
108
- cache: EncoderCache,
108
+ context: EncoderContext,
109
109
  outputBuffer: BufferFormat,
110
110
  ): void;
111
111
  }
@@ -119,7 +119,7 @@ export interface FieldEncoder extends Encoder {
119
119
  */
120
120
  encodeField(
121
121
  cursor: ITreeCursorSynchronous,
122
- cache: EncoderCache,
122
+ context: EncoderContext,
123
123
  outputBuffer: BufferFormat,
124
124
  ): void;
125
125
  }
@@ -132,10 +132,10 @@ export function asFieldEncoder(encoder: NodeEncoder): FieldEncoder {
132
132
  return {
133
133
  encodeField(
134
134
  cursor: ITreeCursorSynchronous,
135
- shapes: EncoderCache,
135
+ context: EncoderContext,
136
136
  outputBuffer: BufferFormat,
137
137
  ): void {
138
- forEachNode(cursor, () => encoder.encodeNode(cursor, shapes, outputBuffer));
138
+ forEachNode(cursor, () => encoder.encodeNode(cursor, context, outputBuffer));
139
139
  },
140
140
  shape: encoder.shape,
141
141
  };
@@ -148,10 +148,10 @@ export function asNodesEncoder(encoder: NodeEncoder): NodesEncoder {
148
148
  return {
149
149
  encodeNodes(
150
150
  cursor: ITreeCursorSynchronous,
151
- shapes: EncoderCache,
151
+ context: EncoderContext,
152
152
  outputBuffer: BufferFormat,
153
153
  ): void {
154
- encoder.encodeNode(cursor, shapes, outputBuffer);
154
+ encoder.encodeNode(cursor, context, outputBuffer);
155
155
  cursor.nextNode();
156
156
  },
157
157
  shape: encoder.shape,
@@ -182,32 +182,32 @@ export class AnyShape extends ShapeGeneric<EncodedChunkShape> {
182
182
 
183
183
  public static encodeField(
184
184
  cursor: ITreeCursorSynchronous,
185
- cache: EncoderCache,
185
+ context: EncoderContext,
186
186
  outputBuffer: BufferFormat,
187
- shape: FieldEncoder,
187
+ encoder: FieldEncoder,
188
188
  ): void {
189
- outputBuffer.push(shape.shape);
190
- shape.encodeField(cursor, cache, outputBuffer);
189
+ outputBuffer.push(encoder.shape);
190
+ encoder.encodeField(cursor, context, outputBuffer);
191
191
  }
192
192
 
193
193
  public static encodeNode(
194
194
  cursor: ITreeCursorSynchronous,
195
- cache: EncoderCache,
195
+ context: EncoderContext,
196
196
  outputBuffer: BufferFormat,
197
- shape: NodeEncoder,
197
+ encoder: NodeEncoder,
198
198
  ): void {
199
- outputBuffer.push(shape.shape);
200
- shape.encodeNode(cursor, cache, outputBuffer);
199
+ outputBuffer.push(encoder.shape);
200
+ encoder.encodeNode(cursor, context, outputBuffer);
201
201
  }
202
202
 
203
203
  public static encodeNodes(
204
204
  cursor: ITreeCursorSynchronous,
205
- cache: EncoderCache,
205
+ context: EncoderContext,
206
206
  outputBuffer: BufferFormat,
207
- shape: NodesEncoder,
207
+ encoder: NodesEncoder,
208
208
  ): void {
209
- outputBuffer.push(shape.shape);
210
- shape.encodeNodes(cursor, cache, outputBuffer);
209
+ outputBuffer.push(encoder.shape);
210
+ encoder.encodeNodes(cursor, context, outputBuffer);
211
211
  }
212
212
  }
213
213
 
@@ -217,12 +217,12 @@ export class AnyShape extends ShapeGeneric<EncodedChunkShape> {
217
217
  export const anyNodeEncoder: NodeEncoder = {
218
218
  encodeNode(
219
219
  cursor: ITreeCursorSynchronous,
220
- cache: EncoderCache,
220
+ context: EncoderContext,
221
221
  outputBuffer: BufferFormat,
222
222
  ): void {
223
223
  // TODO: Fast path uniform chunk content.
224
- const shape = cache.shapeFromTree(cursor.type);
225
- AnyShape.encodeNode(cursor, cache, outputBuffer, shape);
224
+ const shape = context.nodeEncoderFromSchema(cursor.type);
225
+ AnyShape.encodeNode(cursor, context, outputBuffer, shape);
226
226
  },
227
227
 
228
228
  shape: AnyShape.instance,
@@ -234,25 +234,25 @@ export const anyNodeEncoder: NodeEncoder = {
234
234
  export const anyFieldEncoder: FieldEncoder = {
235
235
  encodeField(
236
236
  cursor: ITreeCursorSynchronous,
237
- cache: EncoderCache,
237
+ context: EncoderContext,
238
238
  outputBuffer: BufferFormat,
239
239
  ): void {
240
240
  // TODO: Fast path uniform chunks.
241
241
 
242
242
  if (cursor.getFieldLength() === 0) {
243
- const shape = InlineArrayShape.empty;
244
- AnyShape.encodeField(cursor, cache, outputBuffer, shape);
243
+ const shape = InlineArrayEncoder.empty;
244
+ AnyShape.encodeField(cursor, context, outputBuffer, shape);
245
245
  } else if (cursor.getFieldLength() === 1) {
246
246
  // Fast path chunk of size one size one at least: skip nested array.
247
247
  cursor.enterNode(0);
248
- anyNodeEncoder.encodeNode(cursor, cache, outputBuffer);
248
+ anyNodeEncoder.encodeNode(cursor, context, outputBuffer);
249
249
  cursor.exitNode();
250
250
  } else {
251
251
  // TODO: more efficient encoding for common cases.
252
252
  // Could try to find more specific shape compatible with all children than `anyNodeEncoder`.
253
253
 
254
- const shape = cache.nestedArray(anyNodeEncoder);
255
- AnyShape.encodeField(cursor, cache, outputBuffer, shape);
254
+ const shape = context.nestedArrayEncoder(anyNodeEncoder);
255
+ AnyShape.encodeField(cursor, context, outputBuffer, shape);
256
256
  }
257
257
  },
258
258
 
@@ -260,20 +260,23 @@ export const anyFieldEncoder: FieldEncoder = {
260
260
  };
261
261
 
262
262
  /**
263
- * Encodes a chunk using {@link EncodedInlineArray}.
263
+ * Encodes a chunk using {@link EncodedInlineArrayShape}.
264
+ * @remarks
265
+ * The fact this is also a Shape is an implementation detail of the encoder: that allows the shape it uses to be itself,
266
+ * which is an easy way to keep all the related code together without extra objects.
264
267
  */
265
- export class InlineArrayShape
268
+ export class InlineArrayEncoder
266
269
  extends ShapeGeneric<EncodedChunkShape>
267
270
  implements NodesEncoder, FieldEncoder
268
271
  {
269
- public static readonly empty: InlineArrayShape = new InlineArrayShape(0, {
272
+ public static readonly empty: InlineArrayEncoder = new InlineArrayEncoder(0, {
270
273
  get shape() {
271
274
  // Not actually used, makes count work without adding an additional shape.
272
- return InlineArrayShape.empty;
275
+ return InlineArrayEncoder.empty;
273
276
  },
274
277
  encodeNodes(
275
278
  cursor: ITreeCursorSynchronous,
276
- shapes: EncoderCache,
279
+ context: EncoderContext,
277
280
  outputBuffer: BufferFormat,
278
281
  ): void {
279
282
  fail(0xb4d /* Empty array should not encode any nodes */);
@@ -292,19 +295,19 @@ export class InlineArrayShape
292
295
 
293
296
  public encodeNodes(
294
297
  cursor: ITreeCursorSynchronous,
295
- shapes: EncoderCache,
298
+ context: EncoderContext,
296
299
  outputBuffer: BufferFormat,
297
300
  ): void {
298
301
  // Linter is wrong about this loop being for-of compatible.
299
302
  // eslint-disable-next-line @typescript-eslint/prefer-for-of
300
303
  for (let index = 0; index < this.length; index++) {
301
- this.inner.encodeNodes(cursor, shapes, outputBuffer);
304
+ this.inner.encodeNodes(cursor, context, outputBuffer);
302
305
  }
303
306
  }
304
307
 
305
308
  public encodeField(
306
309
  cursor: ITreeCursorSynchronous,
307
- shapes: EncoderCache,
310
+ context: EncoderContext,
308
311
  outputBuffer: BufferFormat,
309
312
  ): void {
310
313
  // Its possible individual items from this array encode multiple nodes, so don't assume === here.
@@ -313,7 +316,7 @@ export class InlineArrayShape
313
316
  0x73c /* unexpected length for fixed length array */,
314
317
  );
315
318
  cursor.firstNode();
316
- this.encodeNodes(cursor, shapes, outputBuffer);
319
+ this.encodeNodes(cursor, context, outputBuffer);
317
320
  assert(
318
321
  cursor.mode === CursorLocationType.Fields,
319
322
  0x73d /* should return to fields mode when finished encoding */,
@@ -345,9 +348,15 @@ export class InlineArrayShape
345
348
  }
346
349
 
347
350
  /**
348
- * Encodes a field as a nested array with the {@link EncodedNestedArray} shape.
351
+ * Encodes a field as a nested array with the {@link EncodedNestedArrayShape} shape.
352
+ * @remarks
353
+ * The fact this is also a Shape is an implementation detail of the encoder: that allows the shape it uses to be itself,
354
+ * which is an easy way to keep all the related code together without extra objects.
349
355
  */
350
- export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements FieldEncoder {
356
+ export class NestedArrayEncoder
357
+ extends ShapeGeneric<EncodedChunkShape>
358
+ implements FieldEncoder
359
+ {
351
360
  public readonly shape: Shape;
352
361
 
353
362
  public constructor(public readonly inner: NodeEncoder) {
@@ -357,7 +366,7 @@ export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements
357
366
 
358
367
  public encodeField(
359
368
  cursor: ITreeCursorSynchronous,
360
- cache: EncoderCache,
369
+ context: EncoderContext,
361
370
  outputBuffer: BufferFormat,
362
371
  ): void {
363
372
  const buffer: BufferFormat = [];
@@ -365,7 +374,7 @@ export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements
365
374
  const length = cursor.getFieldLength();
366
375
  forEachNode(cursor, () => {
367
376
  const before = buffer.length;
368
- this.inner.encodeNode(cursor, cache, buffer);
377
+ this.inner.encodeNode(cursor, context, buffer);
369
378
  allNonZeroSize &&= buffer.length - before !== 0;
370
379
  });
371
380
  if (buffer.length === 0) {
@@ -385,7 +394,7 @@ export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements
385
394
  identifiers: DeduplicationTable<string>,
386
395
  shapes: DeduplicationTable<Shape>,
387
396
  ): EncodedChunkShape {
388
- const shape: EncodedNestedArray =
397
+ const shape: EncodedNestedArrayShape =
389
398
  shapes.valueToIndex.get(this.inner.shape) ??
390
399
  fail(0xb4f /* index for shape not found in table */);
391
400
  return {
@@ -436,46 +445,60 @@ export function encodeValue(
436
445
  }
437
446
  }
438
447
 
439
- export class EncoderCache implements TreeShaper, FieldShaper {
440
- private readonly shapesFromSchema: Map<TreeNodeSchemaIdentifier, NodeEncoder> = new Map();
441
- private readonly nestedArrays: Map<NodeEncoder, NestedArrayShape> = new Map();
448
+ /**
449
+ * Provides common contextual information during encoding, like schema and policy settings.
450
+ * Also, provides a cache to avoid duplicating equivalent shapes during a batch of encode operations.
451
+ * To avoid Shape duplication, any Shapes used in the encoding should either be:
452
+ * - Singletons defined in a static scope.
453
+ * - Cached in this object for future reuse such that all equivalent Shapes are deduplicated.
454
+ */
455
+ export class EncoderContext implements NodeEncodeBuilder, FieldEncodeBuilder {
456
+ private readonly nodeEncodersFromSchema: Map<TreeNodeSchemaIdentifier, NodeEncoder> =
457
+ new Map();
458
+ private readonly nestedArrayEncoders: Map<NodeEncoder, NestedArrayEncoder> = new Map();
442
459
  public constructor(
443
- private readonly treeEncoder: TreeShapePolicy,
444
- private readonly fieldEncoder: FieldShapePolicy,
460
+ private readonly nodeEncoderFromPolicy: NodeEncoderPolicy,
461
+ private readonly fieldEncoderFromPolicy: FieldEncoderPolicy,
445
462
  public readonly fieldShapes: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
446
463
  public readonly idCompressor: IIdCompressor,
447
464
  ) {}
448
465
 
449
- public shapeFromTree(schemaName: TreeNodeSchemaIdentifier): NodeEncoder {
450
- return getOrCreate(this.shapesFromSchema, schemaName, () =>
451
- this.treeEncoder(this, schemaName),
466
+ public nodeEncoderFromSchema(schemaName: TreeNodeSchemaIdentifier): NodeEncoder {
467
+ return getOrCreate(this.nodeEncodersFromSchema, schemaName, () =>
468
+ this.nodeEncoderFromPolicy(this, schemaName),
452
469
  );
453
470
  }
454
471
 
455
- public nestedArray(inner: NodeEncoder): NestedArrayShape {
456
- return getOrCreate(this.nestedArrays, inner, () => new NestedArrayShape(inner));
472
+ public fieldEncoderFromSchema(fieldSchema: TreeFieldStoredSchema): FieldEncoder {
473
+ return new LazyFieldEncoder(this, fieldSchema, this.fieldEncoderFromPolicy);
457
474
  }
458
475
 
459
- public shapeFromField(field: TreeFieldStoredSchema): FieldEncoder {
460
- return new LazyFieldEncoder(this, field, this.fieldEncoder);
476
+ public nestedArrayEncoder(inner: NodeEncoder): NestedArrayEncoder {
477
+ return getOrCreate(this.nestedArrayEncoders, inner, () => new NestedArrayEncoder(inner));
461
478
  }
462
479
  }
463
480
 
464
- export interface TreeShaper {
465
- shapeFromTree(schemaName: TreeNodeSchemaIdentifier): NodeEncoder;
481
+ export interface NodeEncodeBuilder {
482
+ nodeEncoderFromSchema(schemaName: TreeNodeSchemaIdentifier): NodeEncoder;
466
483
  }
467
484
 
468
- export interface FieldShaper {
469
- shapeFromField(field: TreeFieldStoredSchema): FieldEncoder;
485
+ export interface FieldEncodeBuilder {
486
+ fieldEncoderFromSchema(schema: TreeFieldStoredSchema): FieldEncoder;
470
487
  }
471
488
 
472
- export type FieldShapePolicy = (
473
- treeShaper: TreeShaper,
474
- field: TreeFieldStoredSchema,
489
+ /**
490
+ * The policy for building a {@link FieldEncoder} for a field.
491
+ */
492
+ export type FieldEncoderPolicy = (
493
+ nodeBuilder: NodeEncodeBuilder,
494
+ schema: TreeFieldStoredSchema,
475
495
  ) => FieldEncoder;
476
496
 
477
- export type TreeShapePolicy = (
478
- fieldShaper: FieldShaper,
497
+ /**
498
+ * The policy for building a {@link NodeEncoder} for a node.
499
+ */
500
+ export type NodeEncoderPolicy = (
501
+ fieldBuilder: FieldEncodeBuilder,
479
502
  schemaName: TreeNodeSchemaIdentifier,
480
503
  ) => NodeEncoder;
481
504
 
@@ -483,21 +506,21 @@ class LazyFieldEncoder implements FieldEncoder {
483
506
  private encoderLazy: FieldEncoder | undefined;
484
507
 
485
508
  public constructor(
486
- public readonly cache: TreeShaper,
487
- public readonly field: TreeFieldStoredSchema,
488
- private readonly fieldEncoder: FieldShapePolicy,
509
+ public readonly nodeBuilder: NodeEncodeBuilder,
510
+ public readonly fieldSchema: TreeFieldStoredSchema,
511
+ private readonly fieldEncoderFromPolicy: FieldEncoderPolicy,
489
512
  ) {}
490
513
  public encodeField(
491
514
  cursor: ITreeCursorSynchronous,
492
- cache: EncoderCache,
515
+ context: EncoderContext,
493
516
  outputBuffer: BufferFormat,
494
517
  ): void {
495
- this.encoder.encodeField(cursor, cache, outputBuffer);
518
+ this.encoder.encodeField(cursor, context, outputBuffer);
496
519
  }
497
520
 
498
521
  private get encoder(): FieldEncoder {
499
522
  if (this.encoderLazy === undefined) {
500
- this.encoderLazy = this.fieldEncoder(this.cache, this.field);
523
+ this.encoderLazy = this.fieldEncoderFromPolicy(this.nodeBuilder, this.fieldSchema);
501
524
  }
502
525
  return this.encoderLazy;
503
526
  }
@@ -24,12 +24,12 @@ export const validVersions = new Set([version]);
24
24
  * Top level length is implied from length of data array.
25
25
  * All content are of this shape.
26
26
  */
27
- export const EncodedNestedArray = ShapeIndex;
27
+ export const EncodedNestedArrayShape = ShapeIndex;
28
28
 
29
29
  /**
30
30
  * Inline array.
31
31
  */
32
- export const EncodedInlineArray = Type.Object(
32
+ export const EncodedInlineArrayShape = Type.Object(
33
33
  {
34
34
  length: Count,
35
35
  /**
@@ -123,7 +123,7 @@ export enum SpecialField {
123
123
  * In the future other value shape formats may be added, likely as objects.
124
124
  *
125
125
  * @remarks
126
- * See {@link EncodedTreeShape} for usage.
126
+ * See {@link EncodedNodeShape} for usage.
127
127
  */
128
128
  export const EncodedValueShape = Type.Union([
129
129
  Type.Boolean(),
@@ -134,7 +134,7 @@ export const EncodedValueShape = Type.Union([
134
134
  ]);
135
135
  export type EncodedValueShape = undefined | Static<typeof EncodedValueShape>;
136
136
 
137
- export const EncodedTreeShape = Type.Object(
137
+ export const EncodedNodeShape = Type.Object(
138
138
  {
139
139
  /**
140
140
  * If not provided, inlined in data.
@@ -157,24 +157,30 @@ export const EncodedTreeShape = Type.Object(
157
157
  );
158
158
 
159
159
  /**
160
- * Discriminated union of chunk shapes.
160
+ * Discriminated union that represents the shapes of chunks in the encoded data.
161
+ * "Chunk" here refers to a chunk of tree data, rooted at a range of nodes, that is encoded as a
162
+ * single unit in a specific format represented by one of the shapes in this union.
163
+ *
164
+ * The concept of "chunk" is same for the tree data in memory and in the encoded wire format.
165
+ * The physical representation of the chunk may differ, but the logical structure remains the same.
166
+ * This is similar to other such concepts in the system.
161
167
  *
162
168
  * See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
163
169
  */
164
170
  export const EncodedChunkShape = Type.Object(
165
171
  {
166
172
  /**
167
- * {@link EncodedNestedArray} union member.
173
+ * {@link EncodedNestedArrayShape} union member.
168
174
  */
169
- a: Type.Optional(EncodedNestedArray),
175
+ a: Type.Optional(EncodedNestedArrayShape),
170
176
  /**
171
- * {@link EncodedInlineArray} union member.
177
+ * {@link EncodedInlineArrayShape} union member.
172
178
  */
173
- b: Type.Optional(EncodedInlineArray),
179
+ b: Type.Optional(EncodedInlineArrayShape),
174
180
  /**
175
- * {@link EncodedTreeShape} union member.
181
+ * {@link EncodedNodeShape} union member.
176
182
  */
177
- c: Type.Optional(EncodedTreeShape),
183
+ c: Type.Optional(EncodedNodeShape),
178
184
  /**
179
185
  * {@link EncodedAnyShape} union member.
180
186
  */
@@ -185,9 +191,9 @@ export const EncodedChunkShape = Type.Object(
185
191
 
186
192
  export type EncodedChunkShape = Static<typeof EncodedChunkShape>;
187
193
 
188
- export type EncodedNestedArray = Static<typeof EncodedNestedArray>;
189
- export type EncodedInlineArray = Static<typeof EncodedInlineArray>;
190
- export type EncodedTreeShape = Static<typeof EncodedTreeShape>;
194
+ export type EncodedNestedArrayShape = Static<typeof EncodedNestedArrayShape>;
195
+ export type EncodedInlineArrayShape = Static<typeof EncodedInlineArrayShape>;
196
+ export type EncodedNodeShape = Static<typeof EncodedNodeShape>;
191
197
  export type EncodedAnyShape = Static<typeof EncodedAnyShape>;
192
198
 
193
199
  export const EncodedFieldBatch = EncodedFieldBatchGeneric(version, EncodedChunkShape);