@fluidframework/tree 2.62.0 → 2.63.0-359286

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 (352) hide show
  1. package/.eslintrc.cjs +4 -0
  2. package/api-report/tree.alpha.api.md +31 -5
  3. package/api-report/tree.beta.api.md +26 -0
  4. package/api-report/tree.legacy.beta.api.md +26 -0
  5. package/dist/alpha.d.ts +4 -3
  6. package/dist/beta.d.ts +3 -0
  7. package/dist/codec/codec.d.ts +32 -0
  8. package/dist/codec/codec.d.ts.map +1 -1
  9. package/dist/codec/codec.js +32 -1
  10. package/dist/codec/codec.js.map +1 -1
  11. package/dist/codec/index.d.ts +1 -1
  12. package/dist/codec/index.d.ts.map +1 -1
  13. package/dist/codec/index.js +3 -1
  14. package/dist/codec/index.js.map +1 -1
  15. package/dist/core/index.d.ts +2 -2
  16. package/dist/core/index.d.ts.map +1 -1
  17. package/dist/core/index.js +4 -3
  18. package/dist/core/index.js.map +1 -1
  19. package/dist/core/schema-stored/index.d.ts +1 -1
  20. package/dist/core/schema-stored/index.d.ts.map +1 -1
  21. package/dist/core/schema-stored/index.js.map +1 -1
  22. package/dist/core/schema-stored/schema.d.ts +5 -7
  23. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  24. package/dist/core/schema-stored/schema.js +3 -6
  25. package/dist/core/schema-stored/schema.js.map +1 -1
  26. package/dist/core/tree/detachedFieldIndexCodecs.d.ts +4 -1
  27. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  28. package/dist/core/tree/detachedFieldIndexCodecs.js +5 -1
  29. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  30. package/dist/core/tree/index.d.ts +1 -0
  31. package/dist/core/tree/index.d.ts.map +1 -1
  32. package/dist/core/tree/index.js +3 -1
  33. package/dist/core/tree/index.js.map +1 -1
  34. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +3 -2
  35. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  36. package/dist/feature-libraries/chunked-forest/codec/codecs.js +5 -1
  37. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  38. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +2 -0
  39. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  40. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  41. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +2 -2
  42. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  43. package/dist/feature-libraries/chunked-forest/codec/index.js +2 -1
  44. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  45. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  46. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  47. package/dist/feature-libraries/chunked-forest/index.js +2 -1
  48. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  49. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  50. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  51. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +19 -5
  52. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  53. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  54. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  55. package/dist/feature-libraries/default-schema/index.js +2 -1
  56. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  57. package/dist/feature-libraries/forest-summary/codec.d.ts +4 -1
  58. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  59. package/dist/feature-libraries/forest-summary/codec.js +5 -1
  60. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  61. package/dist/feature-libraries/forest-summary/index.d.ts +1 -0
  62. package/dist/feature-libraries/forest-summary/index.d.ts.map +1 -1
  63. package/dist/feature-libraries/forest-summary/index.js +3 -1
  64. package/dist/feature-libraries/forest-summary/index.js.map +1 -1
  65. package/dist/feature-libraries/index.d.ts +5 -5
  66. package/dist/feature-libraries/index.d.ts.map +1 -1
  67. package/dist/feature-libraries/index.js +7 -2
  68. package/dist/feature-libraries/index.js.map +1 -1
  69. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1 -1
  70. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  71. package/dist/feature-libraries/schema-edits/index.d.ts +1 -1
  72. package/dist/feature-libraries/schema-edits/index.d.ts.map +1 -1
  73. package/dist/feature-libraries/schema-edits/index.js +2 -1
  74. package/dist/feature-libraries/schema-edits/index.js.map +1 -1
  75. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +4 -1
  76. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  77. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +9 -1
  78. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  79. package/dist/feature-libraries/schema-index/codec.d.ts +2 -1
  80. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  81. package/dist/feature-libraries/schema-index/codec.js +5 -1
  82. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  83. package/dist/feature-libraries/schema-index/index.d.ts +1 -1
  84. package/dist/feature-libraries/schema-index/index.d.ts.map +1 -1
  85. package/dist/feature-libraries/schema-index/index.js +2 -1
  86. package/dist/feature-libraries/schema-index/index.js.map +1 -1
  87. package/dist/legacy.d.ts +3 -0
  88. package/dist/packageVersion.d.ts +1 -1
  89. package/dist/packageVersion.d.ts.map +1 -1
  90. package/dist/packageVersion.js +1 -1
  91. package/dist/packageVersion.js.map +1 -1
  92. package/dist/serializableDomainSchema.d.ts +12 -16
  93. package/dist/serializableDomainSchema.d.ts.map +1 -1
  94. package/dist/serializableDomainSchema.js +8 -8
  95. package/dist/serializableDomainSchema.js.map +1 -1
  96. package/dist/shared-tree/index.d.ts +2 -1
  97. package/dist/shared-tree/index.d.ts.map +1 -1
  98. package/dist/shared-tree/index.js +4 -1
  99. package/dist/shared-tree/index.js.map +1 -1
  100. package/dist/shared-tree/sharedTree.d.ts +18 -2
  101. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  102. package/dist/shared-tree/sharedTree.js +122 -8
  103. package/dist/shared-tree/sharedTree.js.map +1 -1
  104. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +17 -2
  105. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  106. package/dist/shared-tree/sharedTreeChangeCodecs.js +31 -18
  107. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  108. package/dist/shared-tree/treeCheckout.js.map +1 -1
  109. package/dist/shared-tree-core/defaultResubmitMachine.d.ts +7 -12
  110. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  111. package/dist/shared-tree-core/defaultResubmitMachine.js +53 -73
  112. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  113. package/dist/shared-tree-core/editManager.js +8 -4
  114. package/dist/shared-tree-core/editManager.js.map +1 -1
  115. package/dist/shared-tree-core/editManagerCodecs.d.ts +7 -4
  116. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  117. package/dist/shared-tree-core/editManagerCodecs.js +42 -11
  118. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  119. package/dist/shared-tree-core/index.d.ts +2 -1
  120. package/dist/shared-tree-core/index.d.ts.map +1 -1
  121. package/dist/shared-tree-core/index.js +6 -1
  122. package/dist/shared-tree-core/index.js.map +1 -1
  123. package/dist/shared-tree-core/messageCodecs.d.ts +7 -4
  124. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  125. package/dist/shared-tree-core/messageCodecs.js +44 -23
  126. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  127. package/dist/shared-tree-core/resubmitMachine.d.ts +9 -18
  128. package/dist/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  129. package/dist/shared-tree-core/resubmitMachine.js.map +1 -1
  130. package/dist/shared-tree-core/sharedTreeCore.d.ts +6 -4
  131. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  132. package/dist/shared-tree-core/sharedTreeCore.js +12 -13
  133. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  134. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +7 -166
  135. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  136. package/dist/simple-tree/api/schemaFactoryAlpha.js +11 -44
  137. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  138. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +90 -1
  139. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  140. package/dist/simple-tree/api/schemaFactoryBeta.js +55 -0
  141. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  142. package/dist/simple-tree/api/treeBeta.d.ts +12 -2
  143. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  144. package/dist/simple-tree/api/treeBeta.js +6 -0
  145. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  146. package/dist/simple-tree/api/typesUnsafe.d.ts +1 -1
  147. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  148. package/dist/simple-tree/core/treeNode.d.ts +3 -2
  149. package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
  150. package/dist/simple-tree/core/treeNode.js +3 -2
  151. package/dist/simple-tree/core/treeNode.js.map +1 -1
  152. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  153. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +2 -2
  154. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  155. package/dist/util/brand.d.ts +1 -1
  156. package/dist/util/brand.js.map +1 -1
  157. package/docs/main/compatibility.md +8 -0
  158. package/lib/alpha.d.ts +4 -3
  159. package/lib/beta.d.ts +3 -0
  160. package/lib/codec/codec.d.ts +32 -0
  161. package/lib/codec/codec.d.ts.map +1 -1
  162. package/lib/codec/codec.js +28 -0
  163. package/lib/codec/codec.js.map +1 -1
  164. package/lib/codec/index.d.ts +1 -1
  165. package/lib/codec/index.d.ts.map +1 -1
  166. package/lib/codec/index.js +1 -1
  167. package/lib/codec/index.js.map +1 -1
  168. package/lib/core/index.d.ts +2 -2
  169. package/lib/core/index.d.ts.map +1 -1
  170. package/lib/core/index.js +1 -1
  171. package/lib/core/index.js.map +1 -1
  172. package/lib/core/schema-stored/index.d.ts +1 -1
  173. package/lib/core/schema-stored/index.d.ts.map +1 -1
  174. package/lib/core/schema-stored/index.js.map +1 -1
  175. package/lib/core/schema-stored/schema.d.ts +5 -7
  176. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  177. package/lib/core/schema-stored/schema.js +3 -6
  178. package/lib/core/schema-stored/schema.js.map +1 -1
  179. package/lib/core/tree/detachedFieldIndexCodecs.d.ts +4 -1
  180. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  181. package/lib/core/tree/detachedFieldIndexCodecs.js +3 -0
  182. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  183. package/lib/core/tree/index.d.ts +1 -0
  184. package/lib/core/tree/index.d.ts.map +1 -1
  185. package/lib/core/tree/index.js +1 -0
  186. package/lib/core/tree/index.js.map +1 -1
  187. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +3 -2
  188. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  189. package/lib/feature-libraries/chunked-forest/codec/codecs.js +3 -0
  190. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  191. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +2 -0
  192. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  193. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  194. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +2 -2
  195. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  196. package/lib/feature-libraries/chunked-forest/codec/index.js +1 -1
  197. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  198. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  199. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  200. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  201. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  202. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  203. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  204. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +17 -4
  205. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  206. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  207. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  208. package/lib/feature-libraries/default-schema/index.js +1 -1
  209. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  210. package/lib/feature-libraries/forest-summary/codec.d.ts +4 -1
  211. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  212. package/lib/feature-libraries/forest-summary/codec.js +3 -0
  213. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  214. package/lib/feature-libraries/forest-summary/index.d.ts +1 -0
  215. package/lib/feature-libraries/forest-summary/index.d.ts.map +1 -1
  216. package/lib/feature-libraries/forest-summary/index.js +1 -0
  217. package/lib/feature-libraries/forest-summary/index.js.map +1 -1
  218. package/lib/feature-libraries/index.d.ts +5 -5
  219. package/lib/feature-libraries/index.d.ts.map +1 -1
  220. package/lib/feature-libraries/index.js +5 -5
  221. package/lib/feature-libraries/index.js.map +1 -1
  222. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1 -1
  223. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  224. package/lib/feature-libraries/schema-edits/index.d.ts +1 -1
  225. package/lib/feature-libraries/schema-edits/index.d.ts.map +1 -1
  226. package/lib/feature-libraries/schema-edits/index.js +1 -1
  227. package/lib/feature-libraries/schema-edits/index.js.map +1 -1
  228. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +4 -1
  229. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  230. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -1
  231. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  232. package/lib/feature-libraries/schema-index/codec.d.ts +2 -1
  233. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  234. package/lib/feature-libraries/schema-index/codec.js +3 -0
  235. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  236. package/lib/feature-libraries/schema-index/index.d.ts +1 -1
  237. package/lib/feature-libraries/schema-index/index.d.ts.map +1 -1
  238. package/lib/feature-libraries/schema-index/index.js +1 -1
  239. package/lib/feature-libraries/schema-index/index.js.map +1 -1
  240. package/lib/legacy.d.ts +3 -0
  241. package/lib/packageVersion.d.ts +1 -1
  242. package/lib/packageVersion.d.ts.map +1 -1
  243. package/lib/packageVersion.js +1 -1
  244. package/lib/packageVersion.js.map +1 -1
  245. package/lib/serializableDomainSchema.d.ts +12 -16
  246. package/lib/serializableDomainSchema.d.ts.map +1 -1
  247. package/lib/serializableDomainSchema.js +9 -9
  248. package/lib/serializableDomainSchema.js.map +1 -1
  249. package/lib/shared-tree/index.d.ts +2 -1
  250. package/lib/shared-tree/index.d.ts.map +1 -1
  251. package/lib/shared-tree/index.js +2 -1
  252. package/lib/shared-tree/index.js.map +1 -1
  253. package/lib/shared-tree/sharedTree.d.ts +18 -2
  254. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  255. package/lib/shared-tree/sharedTree.js +126 -13
  256. package/lib/shared-tree/sharedTree.js.map +1 -1
  257. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +17 -2
  258. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  259. package/lib/shared-tree/sharedTreeChangeCodecs.js +30 -18
  260. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  261. package/lib/shared-tree/treeCheckout.js.map +1 -1
  262. package/lib/shared-tree-core/defaultResubmitMachine.d.ts +7 -12
  263. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  264. package/lib/shared-tree-core/defaultResubmitMachine.js +55 -75
  265. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  266. package/lib/shared-tree-core/editManager.js +8 -4
  267. package/lib/shared-tree-core/editManager.js.map +1 -1
  268. package/lib/shared-tree-core/editManagerCodecs.d.ts +7 -4
  269. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  270. package/lib/shared-tree-core/editManagerCodecs.js +40 -10
  271. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  272. package/lib/shared-tree-core/index.d.ts +2 -1
  273. package/lib/shared-tree-core/index.d.ts.map +1 -1
  274. package/lib/shared-tree-core/index.js +2 -1
  275. package/lib/shared-tree-core/index.js.map +1 -1
  276. package/lib/shared-tree-core/messageCodecs.d.ts +7 -4
  277. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  278. package/lib/shared-tree-core/messageCodecs.js +42 -22
  279. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  280. package/lib/shared-tree-core/resubmitMachine.d.ts +9 -18
  281. package/lib/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  282. package/lib/shared-tree-core/resubmitMachine.js.map +1 -1
  283. package/lib/shared-tree-core/sharedTreeCore.d.ts +6 -4
  284. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  285. package/lib/shared-tree-core/sharedTreeCore.js +13 -14
  286. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  287. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +7 -166
  288. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  289. package/lib/simple-tree/api/schemaFactoryAlpha.js +12 -45
  290. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  291. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +90 -1
  292. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  293. package/lib/simple-tree/api/schemaFactoryBeta.js +56 -1
  294. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  295. package/lib/simple-tree/api/treeBeta.d.ts +12 -2
  296. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  297. package/lib/simple-tree/api/treeBeta.js +7 -1
  298. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  299. package/lib/simple-tree/api/typesUnsafe.d.ts +1 -1
  300. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  301. package/lib/simple-tree/core/treeNode.d.ts +3 -2
  302. package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
  303. package/lib/simple-tree/core/treeNode.js +3 -2
  304. package/lib/simple-tree/core/treeNode.js.map +1 -1
  305. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  306. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +2 -2
  307. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  308. package/lib/util/brand.d.ts +1 -1
  309. package/lib/util/brand.js.map +1 -1
  310. package/package.json +21 -21
  311. package/src/codec/codec.ts +60 -0
  312. package/src/codec/index.ts +3 -0
  313. package/src/core/index.ts +3 -0
  314. package/src/core/schema-stored/index.ts +1 -0
  315. package/src/core/schema-stored/schema.ts +5 -6
  316. package/src/core/tree/detachedFieldIndexCodecs.ts +9 -0
  317. package/src/core/tree/index.ts +6 -0
  318. package/src/feature-libraries/chunked-forest/codec/codecs.ts +6 -1
  319. package/src/feature-libraries/chunked-forest/codec/format.ts +2 -0
  320. package/src/feature-libraries/chunked-forest/codec/index.ts +2 -1
  321. package/src/feature-libraries/chunked-forest/index.ts +2 -0
  322. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +29 -5
  323. package/src/feature-libraries/default-schema/index.ts +2 -0
  324. package/src/feature-libraries/forest-summary/codec.ts +7 -0
  325. package/src/feature-libraries/forest-summary/index.ts +1 -0
  326. package/src/feature-libraries/index.ts +12 -1
  327. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +1 -1
  328. package/src/feature-libraries/schema-edits/index.ts +5 -1
  329. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +17 -1
  330. package/src/feature-libraries/schema-index/codec.ts +5 -0
  331. package/src/feature-libraries/schema-index/index.ts +1 -0
  332. package/src/packageVersion.ts +1 -1
  333. package/src/serializableDomainSchema.ts +12 -11
  334. package/src/shared-tree/index.ts +6 -0
  335. package/src/shared-tree/sharedTree.ts +151 -11
  336. package/src/shared-tree/sharedTreeChangeCodecs.ts +68 -30
  337. package/src/shared-tree/treeCheckout.ts +1 -1
  338. package/src/shared-tree-core/defaultResubmitMachine.ts +77 -120
  339. package/src/shared-tree-core/editManager.ts +10 -4
  340. package/src/shared-tree-core/editManagerCodecs.ts +62 -9
  341. package/src/shared-tree-core/index.ts +12 -1
  342. package/src/shared-tree-core/messageCodecs.ts +70 -27
  343. package/src/shared-tree-core/resubmitMachine.ts +12 -20
  344. package/src/shared-tree-core/sharedTreeCore.ts +26 -18
  345. package/src/simple-tree/api/schemaFactoryAlpha.ts +16 -296
  346. package/src/simple-tree/api/schemaFactoryBeta.ts +269 -1
  347. package/src/simple-tree/api/treeBeta.ts +36 -1
  348. package/src/simple-tree/api/typesUnsafe.ts +1 -1
  349. package/src/simple-tree/core/treeNode.ts +3 -2
  350. package/src/simple-tree/core/treeNodeKernel.ts +1 -1
  351. package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +2 -2
  352. package/src/util/brand.ts +1 -1
@@ -32,6 +32,8 @@ import {
32
32
  import { sequenceFieldChangeHandler } from "../sequence-field/index.js";
33
33
 
34
34
  import { noChangeCodecFamily } from "./noChangeCodecs.js";
35
+ import type { CodecTree } from "../../codec/index.js";
36
+ import { brand, type Brand } from "../../util/index.js";
35
37
 
36
38
  /**
37
39
  * ChangeHandler that only handles no-op / identity changes.
@@ -205,9 +207,12 @@ export const forbidden = new FieldKindWithEditor(
205
207
  new Set(),
206
208
  );
207
209
 
208
- export const fieldKindConfigurations: ReadonlyMap<number, FieldKindConfiguration> = new Map([
210
+ export const fieldKindConfigurations: ReadonlyMap<
211
+ ModularChangeFormatVersion,
212
+ FieldKindConfiguration
213
+ > = new Map([
209
214
  [
210
- 1,
215
+ brand(1),
211
216
  new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
212
217
  [nodeKey.identifier, { kind: nodeKey, formatVersion: 1 }],
213
218
  [required.identifier, { kind: required, formatVersion: 1 }],
@@ -218,7 +223,7 @@ export const fieldKindConfigurations: ReadonlyMap<number, FieldKindConfiguration
218
223
  ]),
219
224
  ],
220
225
  [
221
- 2,
226
+ brand(2),
222
227
  new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
223
228
  [nodeKey.identifier, { kind: nodeKey, formatVersion: 1 }],
224
229
  [required.identifier, { kind: required, formatVersion: 2 }],
@@ -229,7 +234,7 @@ export const fieldKindConfigurations: ReadonlyMap<number, FieldKindConfiguration
229
234
  ]),
230
235
  ],
231
236
  [
232
- 3,
237
+ brand(3),
233
238
  new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
234
239
  [nodeKey.identifier, { kind: nodeKey, formatVersion: 1 }],
235
240
  [required.identifier, { kind: required, formatVersion: 2 }],
@@ -240,7 +245,7 @@ export const fieldKindConfigurations: ReadonlyMap<number, FieldKindConfiguration
240
245
  ]),
241
246
  ],
242
247
  [
243
- 4,
248
+ brand(4),
244
249
  new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
245
250
  [nodeKey.identifier, { kind: nodeKey, formatVersion: 1 }],
246
251
  [required.identifier, { kind: required, formatVersion: 2 }],
@@ -252,6 +257,25 @@ export const fieldKindConfigurations: ReadonlyMap<number, FieldKindConfiguration
252
257
  ],
253
258
  ]);
254
259
 
260
+ export type ModularChangeFormatVersion = Brand<1 | 2 | 3 | 4, "ModularChangeFormatVersion">;
261
+ export function getCodecTreeForModularChangeFormat(
262
+ version: ModularChangeFormatVersion,
263
+ ): CodecTree {
264
+ const dependencies =
265
+ fieldKindConfigurations.get(version) ?? fail("Unknown modular change format");
266
+ const children: CodecTree[] = Array.from(dependencies.entries()).map(
267
+ ([key, { formatVersion }]) => ({
268
+ name: `FieldKind:${key}`,
269
+ version: formatVersion,
270
+ }),
271
+ );
272
+ return {
273
+ name: "ModularChange",
274
+ version,
275
+ children,
276
+ };
277
+ }
278
+
255
279
  /**
256
280
  * All supported field kinds.
257
281
  *
@@ -12,6 +12,8 @@ export {
12
12
  type Forbidden,
13
13
  fieldKinds,
14
14
  fieldKindConfigurations,
15
+ getCodecTreeForModularChangeFormat,
16
+ type ModularChangeFormatVersion,
15
17
  } from "./defaultFieldKinds.js";
16
18
 
17
19
  export {
@@ -6,6 +6,7 @@
6
6
  import { assert, oob } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import {
9
+ type CodecTree,
9
10
  type ICodecOptions,
10
11
  type IJsonCodec,
11
12
  makeVersionedValidatedCodec,
@@ -14,6 +15,7 @@ import type { FieldKey, ITreeCursorSynchronous } from "../../core/index.js";
14
15
  import type { FieldBatchCodec, FieldBatchEncodingContext } from "../chunked-forest/index.js";
15
16
 
16
17
  import { Format } from "./format.js";
18
+ import type { Brand } from "../../util/index.js";
17
19
 
18
20
  /**
19
21
  * Uses field cursors
@@ -50,3 +52,8 @@ export function makeForestSummarizerCodec(
50
52
  },
51
53
  });
52
54
  }
55
+
56
+ export type ForestFormatVersion = Brand<1, "ForestFormatVersion">;
57
+ export function getCodecTreeForForestFormat(version: ForestFormatVersion): CodecTree {
58
+ return { name: "Forest", version };
59
+ }
@@ -4,3 +4,4 @@
4
4
  */
5
5
 
6
6
  export { forestSummaryKey, ForestSummarizer } from "./forestSummarizer.js";
7
+ export { getCodecTreeForForestFormat, type ForestFormatVersion } from "./codec.js";
@@ -9,7 +9,11 @@ export {
9
9
  } from "./editableTreeBinder.js";
10
10
  export { allowsValue, assertAllowedValue, isTreeValue } from "./valueUtilities.js";
11
11
 
12
- export { ForestSummarizer } from "./forest-summary/index.js";
12
+ export {
13
+ ForestSummarizer,
14
+ getCodecTreeForForestFormat,
15
+ type ForestFormatVersion,
16
+ } from "./forest-summary/index.js";
13
17
  export {
14
18
  cursorForMapTreeField,
15
19
  cursorForMapTreeNode,
@@ -28,6 +32,7 @@ export {
28
32
  encodeTreeSchema,
29
33
  makeSchemaCodec,
30
34
  makeSchemaCodecs,
35
+ getCodecTreeForSchemaFormat,
31
36
  } from "./schema-index/index.js";
32
37
  export {
33
38
  stackTreeNodeCursor,
@@ -98,6 +103,8 @@ export {
98
103
  defaultChunkPolicy,
99
104
  type FieldBatch,
100
105
  type FieldBatchCodec,
106
+ type FieldBatchFormatVersion,
107
+ getCodecTreeForFieldBatchFormat,
101
108
  makeTreeChunker,
102
109
  makeFieldBatchCodec,
103
110
  fluidVersionToFieldBatchCodecWriteVersion,
@@ -139,6 +146,8 @@ export {
139
146
  isNodeInSchema,
140
147
  isFieldInSchema,
141
148
  throwOutOfSchema,
149
+ getCodecTreeForModularChangeFormat,
150
+ type ModularChangeFormatVersion,
142
151
  } from "./default-schema/index.js";
143
152
 
144
153
  export {
@@ -190,6 +199,8 @@ export {
190
199
  type SchemaChange,
191
200
  makeSchemaChangeCodecs,
192
201
  EncodedSchemaChange,
202
+ getCodecTreeForSchemaChangeFormat,
203
+ type SchemaChangeFormatVersion,
193
204
  } from "./schema-edits/index.js";
194
205
 
195
206
  export { makeMitigatedChangeFamily } from "./mitigatedChangeFamily.js";
@@ -504,7 +504,7 @@ export class ModularChangeFamily
504
504
  }
505
505
 
506
506
  for (const [field, fieldChange2] of change2) {
507
- if (change1 === undefined || !change1.has(field)) {
507
+ if (!change1?.has(field)) {
508
508
  composedFields.set(field, fieldChange2);
509
509
  }
510
510
  }
@@ -3,6 +3,10 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- export { makeSchemaChangeCodecs } from "./schemaChangeCodecs.js";
6
+ export {
7
+ makeSchemaChangeCodecs,
8
+ getCodecTreeForSchemaChangeFormat,
9
+ type SchemaChangeFormatVersion,
10
+ } from "./schemaChangeCodecs.js";
7
11
  export type { SchemaChange } from "./schemaChangeTypes.js";
8
12
  export { EncodedSchemaChange } from "./schemaChangeFormat.js";
@@ -6,6 +6,7 @@
6
6
  import { assert } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import {
9
+ type CodecTree,
9
10
  type ICodecFamily,
10
11
  type ICodecOptions,
11
12
  type IJsonCodec,
@@ -13,11 +14,12 @@ import {
13
14
  makeVersionDispatchingCodec,
14
15
  withSchemaValidation,
15
16
  } from "../../codec/index.js";
16
- import { makeSchemaCodec } from "../schema-index/index.js";
17
+ import { getCodecTreeForSchemaFormat, makeSchemaCodec } from "../schema-index/index.js";
17
18
 
18
19
  import { EncodedSchemaChange } from "./schemaChangeFormat.js";
19
20
  import type { SchemaChange } from "./schemaChangeTypes.js";
20
21
  import { SchemaVersion } from "../../core/index.js";
22
+ import type { Brand } from "../../util/index.js";
21
23
 
22
24
  /**
23
25
  * Create a family of schema change codecs.
@@ -31,6 +33,20 @@ export function makeSchemaChangeCodecs(options: ICodecOptions): ICodecFamily<Sch
31
33
  ]);
32
34
  }
33
35
 
36
+ export type SchemaChangeFormatVersion = Brand<
37
+ SchemaVersion.v1 | SchemaVersion.v2,
38
+ "SchemaChangeFormatVersion"
39
+ >;
40
+ export function getCodecTreeForSchemaChangeFormat(
41
+ version: SchemaChangeFormatVersion,
42
+ ): CodecTree {
43
+ return {
44
+ name: "SchemaChange",
45
+ version,
46
+ children: [getCodecTreeForSchemaFormat(version)],
47
+ };
48
+ }
49
+
34
50
  /**
35
51
  * Create a schema change codec.
36
52
  * @param options - Specifies common codec options, including which `validator` to use.
@@ -6,6 +6,7 @@
6
6
  import { fail, unreachableCase } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import {
9
+ type CodecTree,
9
10
  type FluidClientVersion,
10
11
  type ICodecFamily,
11
12
  type ICodecOptions,
@@ -41,6 +42,10 @@ export function clientVersionToSchemaVersion(
41
42
  return SchemaVersion.v1;
42
43
  }
43
44
 
45
+ export function getCodecTreeForSchemaFormat(version: SchemaVersion): CodecTree {
46
+ return { name: "Schema", version };
47
+ }
48
+
44
49
  /**
45
50
  * Create a schema codec.
46
51
  * @param options - Specifies common codec options, including which `validator` to use.
@@ -8,6 +8,7 @@ export {
8
8
  makeSchemaCodec,
9
9
  makeSchemaCodecs,
10
10
  clientVersionToSchemaVersion,
11
+ getCodecTreeForSchemaFormat,
11
12
  } from "./codec.js";
12
13
  export { Format as FormatV1 } from "./formatV1.js";
13
14
  export { Format as FormatV2 } from "./formatV2.js";
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.62.0";
9
+ export const pkgVersion = "2.63.0-359286";
@@ -7,13 +7,14 @@ import type { IFluidHandle } from "@fluidframework/core-interfaces";
7
7
 
8
8
  import {
9
9
  SchemaFactory,
10
+ SchemaFactoryAlpha,
10
11
  type FixRecursiveArraySchema,
11
12
  type TreeNodeFromImplicitAllowedTypes,
12
13
  type ValidateRecursiveSchema,
13
14
  } from "./simple-tree/index.js";
14
15
  import type { JsonCompatible } from "./util/index.js";
15
16
 
16
- const sf = new SchemaFactory("com.fluidframework.serializable");
17
+ const sf = new SchemaFactoryAlpha("com.fluidframework.serializable");
17
18
 
18
19
  /**
19
20
  * Utilities for storing {@link FluidSerializableAsTree.Data|Fluid Serializable data} in {@link TreeNode}s.
@@ -23,14 +24,14 @@ const sf = new SchemaFactory("com.fluidframework.serializable");
23
24
  * Schema which replicate the Fluid Serializable data model with {@link TreeNode}s.
24
25
  *
25
26
  * Fluid Serializable data can be imported from the {@link FluidSerializableAsTree.Data|Fluid Serializable format} into this format using {@link (TreeAlpha:interface).importConcise} with the {@link FluidSerializableAsTree.(Tree:variable)} schema.
26
- * @internal
27
+ * @alpha
27
28
  */
28
29
  export namespace FluidSerializableAsTree {
29
30
  /**
30
31
  * Data which can be serialized by Fluid.
31
32
  * @remarks
32
33
  * Can be encoded as a {@link FluidSerializableAsTree.(Tree:type)} using {@link (TreeAlpha:interface).importConcise}.
33
- * @internal
34
+ * @alpha
34
35
  */
35
36
  export type Data = JsonCompatible<IFluidHandle>;
36
37
 
@@ -40,7 +41,7 @@ export namespace FluidSerializableAsTree {
40
41
  * ```typescript
41
42
  * const tree = TreeAlpha.importConcise(FluidSerializableAsTree.Tree, { example: { nested: true }, value: 5 });
42
43
  * ```
43
- * @internal
44
+ * @alpha
44
45
  */
45
46
  export const Tree = [
46
47
  () => FluidSerializableObject,
@@ -49,15 +50,15 @@ export namespace FluidSerializableAsTree {
49
50
  ] as const;
50
51
 
51
52
  /**
52
- * @internal
53
+ * @alpha
53
54
  */
54
55
  export type Tree = TreeNodeFromImplicitAllowedTypes<typeof Tree>;
55
56
 
56
57
  /**
57
58
  * Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
58
- * @system @internal
59
+ * @system @alpha
59
60
  */
60
- export const _APIExtractorWorkaroundObjectBase = sf.mapRecursive("object", Tree);
61
+ export const _APIExtractorWorkaroundObjectBase = sf.recordRecursive("object", Tree);
61
62
 
62
63
  /**
63
64
  * Arbitrary Fluid Serializable object as a {@link TreeNode}.
@@ -74,7 +75,7 @@ export namespace FluidSerializableAsTree {
74
75
  * ```
75
76
  * @privateRemarks
76
77
  * Due to https://github.com/microsoft/TypeScript/issues/61270 this can't be named `Object`.
77
- * @sealed @internal
78
+ * @sealed @alpha
78
79
  */
79
80
  export class FluidSerializableObject extends _APIExtractorWorkaroundObjectBase {}
80
81
  {
@@ -86,7 +87,7 @@ export namespace FluidSerializableAsTree {
86
87
  * @privateRemarks
87
88
  * In the past this this had to reference the base type (_APIExtractorWorkaroundArrayBase).
88
89
  * Testing for this in examples/utils/import-testing now shows it has to reference FluidSerializableAsTree.Array instead.
89
- * @system @internal
90
+ * @system @alpha
90
91
  */
91
92
  export declare type _RecursiveArrayWorkaroundJsonArray = FixRecursiveArraySchema<
92
93
  typeof Array
@@ -94,7 +95,7 @@ export namespace FluidSerializableAsTree {
94
95
 
95
96
  /**
96
97
  * Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
97
- * @system @internal
98
+ * @system @alpha
98
99
  */
99
100
  export const _APIExtractorWorkaroundArrayBase = sf.arrayRecursive("array", Tree);
100
101
 
@@ -113,7 +114,7 @@ export namespace FluidSerializableAsTree {
113
114
  * assert(Tree.is(inner, FluidSerializableAsTree.Array));
114
115
  * const leaf = inner[0];
115
116
  * ```
116
- * @sealed @internal
117
+ * @sealed @alpha
117
118
  */
118
119
  export class Array extends _APIExtractorWorkaroundArrayBase {}
119
120
  {
@@ -24,6 +24,7 @@ export {
24
24
  exportSimpleSchema,
25
25
  type SharedTreeKernelView,
26
26
  persistedToSimpleSchema,
27
+ getCodecTreeForSharedTreeFormat,
27
28
  } from "./sharedTree.js";
28
29
 
29
30
  export {
@@ -60,3 +61,8 @@ export {
60
61
  } from "./independentView.js";
61
62
 
62
63
  export type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
64
+
65
+ export {
66
+ getCodecTreeForChangeFormat,
67
+ type SharedTreeChangeFormatVersion,
68
+ } from "./sharedTreeChangeCodecs.js";
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import type { ErasedType, IFluidLoadable } from "@fluidframework/core-interfaces/internal";
7
- import { assert, fail } from "@fluidframework/core-utils/internal";
7
+ import { assert, fail, unreachableCase } from "@fluidframework/core-utils/internal";
8
8
  import type { IChannelStorageService } from "@fluidframework/datastore-definitions/internal";
9
9
  import type { IIdCompressor, StableId } from "@fluidframework/id-compressor";
10
10
  import type {
@@ -18,12 +18,15 @@ import {
18
18
  } from "@fluidframework/telemetry-utils/internal";
19
19
 
20
20
  import {
21
+ type CodecTree,
21
22
  type CodecWriteOptions,
23
+ DependentFormatVersion,
22
24
  FluidClientVersion,
23
25
  FormatValidatorNoOp,
24
26
  type ICodecOptions,
25
27
  } from "../codec/index.js";
26
28
  import {
29
+ type DetachedFieldIndexFormatVersion,
27
30
  type FieldKey,
28
31
  type GraphCommit,
29
32
  type IEditableForest,
@@ -32,6 +35,7 @@ import {
32
35
  MapNodeStoredSchema,
33
36
  ObjectNodeStoredSchema,
34
37
  RevisionTagCodec,
38
+ type SchemaFormatVersion,
35
39
  SchemaVersion,
36
40
  type TreeFieldStoredSchema,
37
41
  type TreeNodeSchemaIdentifier,
@@ -39,6 +43,7 @@ import {
39
43
  type TreeStoredSchema,
40
44
  TreeStoredSchemaRepository,
41
45
  type TreeStoredSchemaSubscription,
46
+ getCodecTreeForDetachedFieldIndexFormat,
42
47
  makeDetachedFieldIndex,
43
48
  moveToDetachedField,
44
49
  } from "../core/index.js";
@@ -51,11 +56,16 @@ import {
51
56
  buildChunkedForest,
52
57
  buildForest,
53
58
  defaultSchemaPolicy,
59
+ getCodecTreeForFieldBatchFormat,
60
+ getCodecTreeForForestFormat,
61
+ getCodecTreeForSchemaFormat,
54
62
  jsonableTreeFromFieldCursor,
55
63
  makeFieldBatchCodec,
56
64
  makeMitigatedChangeFamily,
57
65
  makeSchemaCodec,
58
66
  makeTreeChunker,
67
+ type FieldBatchFormatVersion,
68
+ type ForestFormatVersion,
59
69
  type TreeCompressionStrategyPrivate,
60
70
  } from "../feature-libraries/index.js";
61
71
  // eslint-disable-next-line import/no-internal-modules
@@ -63,7 +73,11 @@ import type { FormatV1 } from "../feature-libraries/schema-index/index.js";
63
73
  import {
64
74
  type BranchId,
65
75
  type ClonableSchemaAndPolicy,
76
+ type EditManagerFormatVersion,
66
77
  type ExplicitCoreCodecVersions,
78
+ getCodecTreeForEditManagerFormatWithChange,
79
+ getCodecTreeForMessageFormatWithChange,
80
+ type MessageFormatVersion,
67
81
  SharedTreeCore,
68
82
  } from "../shared-tree-core/index.js";
69
83
  import {
@@ -92,11 +106,16 @@ import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
92
106
  import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
93
107
  import { type TreeCheckout, type BranchableTree, createTreeCheckout } from "./treeCheckout.js";
94
108
  import {
109
+ brand,
95
110
  type Breakable,
96
111
  breakingClass,
97
112
  type JsonCompatible,
98
113
  throwIfBroken,
99
114
  } from "../util/index.js";
115
+ import {
116
+ getCodecTreeForChangeFormat,
117
+ type SharedTreeChangeFormatVersion,
118
+ } from "./sharedTreeChangeCodecs.js";
100
119
 
101
120
  /**
102
121
  * Copy of data from an {@link ITreePrivate} at some point in time.
@@ -161,36 +180,78 @@ export interface ITreePrivate extends ITreeInternal {
161
180
  * TODO: Plumb these write versions into forest, schema, detached field index codec creation.
162
181
  */
163
182
  interface ExplicitCodecVersions extends ExplicitCoreCodecVersions {
164
- forest: number;
165
- schema: SchemaVersion;
166
- detachedFieldIndex: number;
167
- fieldBatch: number;
183
+ forest: ForestFormatVersion;
184
+ schema: SchemaFormatVersion;
185
+ detachedFieldIndex: DetachedFieldIndexFormatVersion;
186
+ fieldBatch: FieldBatchFormatVersion;
168
187
  }
169
188
 
170
189
  const formatVersionToTopLevelCodecVersions = new Map<number, ExplicitCodecVersions>([
171
190
  [
172
191
  1,
173
- { forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 1, message: 1, fieldBatch: 1 },
192
+ {
193
+ forest: brand(1),
194
+ schema: brand(1),
195
+ detachedFieldIndex: brand(1),
196
+ editManager: brand(1),
197
+ message: brand(1),
198
+ fieldBatch: brand(1),
199
+ },
174
200
  ],
175
201
  [
176
202
  2,
177
- { forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 2, message: 2, fieldBatch: 1 },
203
+ {
204
+ forest: brand(1),
205
+ schema: brand(1),
206
+ detachedFieldIndex: brand(1),
207
+ editManager: brand(2),
208
+ message: brand(2),
209
+ fieldBatch: brand(1),
210
+ },
178
211
  ],
179
212
  [
180
213
  3,
181
- { forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 3, message: 3, fieldBatch: 1 },
214
+ {
215
+ forest: brand(1),
216
+ schema: brand(1),
217
+ detachedFieldIndex: brand(1),
218
+ editManager: brand(3),
219
+ message: brand(3),
220
+ fieldBatch: brand(1),
221
+ },
182
222
  ],
183
223
  [
184
224
  4,
185
- { forest: 1, schema: 1, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },
225
+ {
226
+ forest: brand(1),
227
+ schema: brand(1),
228
+ detachedFieldIndex: brand(1),
229
+ editManager: brand(4),
230
+ message: brand(4),
231
+ fieldBatch: brand(1),
232
+ },
186
233
  ],
187
234
  [
188
235
  5,
189
- { forest: 1, schema: 2, detachedFieldIndex: 1, editManager: 4, message: 4, fieldBatch: 1 },
236
+ {
237
+ forest: brand(1),
238
+ schema: brand(2),
239
+ detachedFieldIndex: brand(1),
240
+ editManager: brand(4),
241
+ message: brand(4),
242
+ fieldBatch: brand(1),
243
+ },
190
244
  ],
191
245
  [
192
246
  100, // SharedTreeFormatVersion.vSharedBranches
193
- { forest: 1, schema: 2, detachedFieldIndex: 1, editManager: 5, message: 5, fieldBatch: 1 },
247
+ {
248
+ forest: brand(1),
249
+ schema: brand(2),
250
+ detachedFieldIndex: brand(1),
251
+ editManager: brand(5),
252
+ message: brand(5),
253
+ fieldBatch: brand(1),
254
+ },
194
255
  ],
195
256
  ]);
196
257
 
@@ -321,6 +382,8 @@ export class SharedTreeKernel
321
382
  changeFamily,
322
383
  options,
323
384
  codecVersions,
385
+ changeFormatVersionForEditManager,
386
+ changeFormatVersionForMessage,
324
387
  idCompressor,
325
388
  schema,
326
389
  defaultSchemaPolicy,
@@ -635,6 +698,83 @@ export const SharedTreeFormatVersion = {
635
698
  */
636
699
  export type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;
637
700
 
701
+ /**
702
+ * Defines for each EditManagerFormatVersion the SharedTreeChangeFormatVersion to use.
703
+ * This is an arbitrary mapping that is injected in the EditManger codec.
704
+ * Once an entry is defined and used in production, it cannot be changed.
705
+ * This is because the format for SharedTree changes are not explicitly versioned.
706
+ */
707
+ export const changeFormatVersionForEditManager = DependentFormatVersion.fromPairs([
708
+ [brand<EditManagerFormatVersion>(1), brand<SharedTreeChangeFormatVersion>(1)],
709
+ [brand<EditManagerFormatVersion>(2), brand<SharedTreeChangeFormatVersion>(2)],
710
+ [brand<EditManagerFormatVersion>(3), brand<SharedTreeChangeFormatVersion>(3)],
711
+ [brand<EditManagerFormatVersion>(4), brand<SharedTreeChangeFormatVersion>(4)],
712
+ [brand<EditManagerFormatVersion>(5), brand<SharedTreeChangeFormatVersion>(4)],
713
+ ]);
714
+
715
+ /**
716
+ * Defines for each MessageFormatVersion the SharedTreeChangeFormatVersion to use.
717
+ * This is an arbitrary mapping that is injected in the message codec.
718
+ * Once an entry is defined and used in production, it cannot be changed.
719
+ * This is because the format for SharedTree changes are not explicitly versioned.
720
+ */
721
+ export const changeFormatVersionForMessage = DependentFormatVersion.fromPairs([
722
+ [brand<MessageFormatVersion>(undefined), brand<SharedTreeChangeFormatVersion>(1)],
723
+ [brand<MessageFormatVersion>(1), brand<SharedTreeChangeFormatVersion>(1)],
724
+ [brand<MessageFormatVersion>(2), brand<SharedTreeChangeFormatVersion>(2)],
725
+ [brand<MessageFormatVersion>(3), brand<SharedTreeChangeFormatVersion>(3)],
726
+ [brand<MessageFormatVersion>(4), brand<SharedTreeChangeFormatVersion>(4)],
727
+ [brand<MessageFormatVersion>(5), brand<SharedTreeChangeFormatVersion>(4)],
728
+ ]);
729
+
730
+ function getCodecTreeForEditManagerFormat(version: EditManagerFormatVersion): CodecTree {
731
+ const change = changeFormatVersionForEditManager.lookup(version);
732
+ const changeCodecTree = getCodecTreeForChangeFormat(change);
733
+ return getCodecTreeForEditManagerFormatWithChange(version, changeCodecTree);
734
+ }
735
+
736
+ function getCodecTreeForMessageFormat(version: MessageFormatVersion): CodecTree {
737
+ const change = changeFormatVersionForMessage.lookup(version);
738
+ const changeCodecTree = getCodecTreeForChangeFormat(change);
739
+ return getCodecTreeForMessageFormatWithChange(version, changeCodecTree);
740
+ }
741
+
742
+ export function getCodecTreeForSharedTreeFormat(
743
+ version: SharedTreeFormatVersion[keyof SharedTreeFormatVersion],
744
+ ): CodecTree {
745
+ const children: CodecTree[] = [];
746
+ const childCodecs = getCodecVersions(version);
747
+ for (const name of Object.keys(childCodecs) as (keyof ExplicitCodecVersions)[]) {
748
+ switch (name) {
749
+ case "editManager":
750
+ children.push(getCodecTreeForEditManagerFormat(childCodecs.editManager));
751
+ break;
752
+ case "message":
753
+ children.push(getCodecTreeForMessageFormat(childCodecs.message));
754
+ break;
755
+ case "forest":
756
+ children.push(getCodecTreeForForestFormat(childCodecs.forest));
757
+ break;
758
+ case "schema":
759
+ children.push(getCodecTreeForSchemaFormat(childCodecs.schema));
760
+ break;
761
+ case "detachedFieldIndex":
762
+ children.push(getCodecTreeForDetachedFieldIndexFormat(childCodecs.detachedFieldIndex));
763
+ break;
764
+ case "fieldBatch":
765
+ children.push(getCodecTreeForFieldBatchFormat(childCodecs.fieldBatch));
766
+ break;
767
+ default:
768
+ unreachableCase(name);
769
+ }
770
+ }
771
+ return {
772
+ name: "SharedTree",
773
+ version,
774
+ children,
775
+ };
776
+ }
777
+
638
778
  /**
639
779
  * Configuration options for SharedTree.
640
780
  * @beta @input