@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
@@ -3,7 +3,11 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import { unreachableCase } from "@fluidframework/core-utils/internal";
6
7
  import {
8
+ type CodecTree,
9
+ type DependentFormatVersion,
10
+ type FormatVersion,
7
11
  type ICodecFamily,
8
12
  type ICodecOptions,
9
13
  type IJsonCodec,
@@ -16,7 +20,7 @@ import type {
16
20
  RevisionTag,
17
21
  SchemaAndPolicy,
18
22
  } from "../core/index.js";
19
- import type { JsonCompatibleReadOnly } from "../util/index.js";
23
+ import { brand, type Brand, type JsonCompatibleReadOnly } from "../util/index.js";
20
24
 
21
25
  import type { DecodedMessage } from "./messageTypes.js";
22
26
  import type { IIdCompressor } from "@fluidframework/id-compressor";
@@ -30,6 +34,7 @@ export interface MessageEncodingContext {
30
34
 
31
35
  export function makeMessageCodec<TChangeset>(
32
36
  changeCodecs: ICodecFamily<TChangeset, ChangeEncodingContext>,
37
+ dependentChangeFormatVersion: DependentFormatVersion<MessageFormatVersion>,
33
38
  revisionTagCodec: IJsonCodec<
34
39
  RevisionTag,
35
40
  EncodedRevisionTag,
@@ -37,14 +42,19 @@ export function makeMessageCodec<TChangeset>(
37
42
  ChangeEncodingContext
38
43
  >,
39
44
  options: ICodecOptions,
40
- writeVersion: number,
45
+ writeVersion: MessageFormatVersion = brand(1),
41
46
  ): IJsonCodec<
42
47
  DecodedMessage<TChangeset>,
43
48
  JsonCompatibleReadOnly,
44
49
  JsonCompatibleReadOnly,
45
50
  MessageEncodingContext
46
51
  > {
47
- const family = makeMessageCodecs(changeCodecs, revisionTagCodec, options);
52
+ const family = makeMessageCodecs(
53
+ changeCodecs,
54
+ dependentChangeFormatVersion,
55
+ revisionTagCodec,
56
+ options,
57
+ );
48
58
  return makeVersionDispatchingCodec(family, { ...options, writeVersion });
49
59
  }
50
60
 
@@ -53,6 +63,7 @@ export function makeMessageCodec<TChangeset>(
53
63
  */
54
64
  export function makeMessageCodecs<TChangeset>(
55
65
  changeCodecs: ICodecFamily<TChangeset, ChangeEncodingContext>,
66
+ dependentChangeFormatVersion: DependentFormatVersion<MessageFormatVersion>,
56
67
  revisionTagCodec: IJsonCodec<
57
68
  RevisionTag,
58
69
  EncodedRevisionTag,
@@ -61,28 +72,60 @@ export function makeMessageCodecs<TChangeset>(
61
72
  >,
62
73
  options: ICodecOptions,
63
74
  ): ICodecFamily<DecodedMessage<TChangeset>, MessageEncodingContext> {
64
- const v1Codec = makeV1ToV4CodecWithVersion(
65
- changeCodecs.resolve(1).json,
66
- revisionTagCodec,
67
- options,
68
- 1,
69
- );
70
- return makeCodecFamily([
71
- // Back-compat: messages weren't always written with an explicit version field.
72
- [undefined, v1Codec],
73
- [1, v1Codec],
74
- [
75
- 2,
76
- makeV1ToV4CodecWithVersion(changeCodecs.resolve(2).json, revisionTagCodec, options, 2),
77
- ],
78
- [
79
- 3,
80
- makeV1ToV4CodecWithVersion(changeCodecs.resolve(3).json, revisionTagCodec, options, 3),
81
- ],
82
- [
83
- 4,
84
- makeV1ToV4CodecWithVersion(changeCodecs.resolve(4).json, revisionTagCodec, options, 4),
85
- ],
86
- [5, makeV5CodecWithVersion(changeCodecs.resolve(4).json, revisionTagCodec, options, 5)],
87
- ]);
75
+ const registry: [
76
+ FormatVersion,
77
+ IJsonCodec<
78
+ DecodedMessage<TChangeset>,
79
+ JsonCompatibleReadOnly,
80
+ JsonCompatibleReadOnly,
81
+ MessageEncodingContext
82
+ >,
83
+ ][] = Array.from(messageFormatVersions).map((version) => {
84
+ const changeCodec = changeCodecs.resolve(
85
+ dependentChangeFormatVersion.lookup(version),
86
+ ).json;
87
+ switch (version) {
88
+ case undefined:
89
+ case 1:
90
+ case 2:
91
+ case 3:
92
+ case 4:
93
+ return [
94
+ version,
95
+ makeV1ToV4CodecWithVersion(changeCodec, revisionTagCodec, options, version ?? 1),
96
+ ];
97
+ case 5:
98
+ return [
99
+ version,
100
+ makeV5CodecWithVersion(changeCodec, revisionTagCodec, options, version),
101
+ ];
102
+ default:
103
+ unreachableCase(version);
104
+ }
105
+ });
106
+ return makeCodecFamily(registry);
107
+ }
108
+
109
+ export type MessageFormatVersion = Brand<
110
+ undefined | 1 | 2 | 3 | 4 | 5,
111
+ "MessageFormatVersion"
112
+ >;
113
+ export const messageFormatVersions: ReadonlySet<MessageFormatVersion> = new Set([
114
+ brand(undefined),
115
+ brand(1),
116
+ brand(2),
117
+ brand(3),
118
+ brand(4),
119
+ brand(5),
120
+ ]);
121
+
122
+ export function getCodecTreeForMessageFormatWithChange(
123
+ version: MessageFormatVersion,
124
+ changeFormat: CodecTree,
125
+ ): CodecTree {
126
+ return {
127
+ name: "Message",
128
+ version,
129
+ children: [changeFormat],
130
+ };
88
131
  }
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { GraphCommit } from "../core/index.js";
6
+ import type { GraphCommit, RevisionTag } from "../core/index.js";
7
7
 
8
8
  /**
9
9
  * Encapsulates a state machine that can be used by a {@link SharedTreeCore} manage resubmit phases,
@@ -11,25 +11,16 @@ import type { GraphCommit } from "../core/index.js";
11
11
  */
12
12
  export interface ResubmitMachine<TChange> {
13
13
  /**
14
- * Must be called before calling `enrichCommit` as part of a resubmit phase.
15
- * @param toResubmit - the commits that will be resubmitted (from oldest to newest).
16
- * This must be the most rebased version of these commits (i.e., rebased over all known concurrent edits)
17
- * as opposed to the version which was last submitted.
18
- * `toResubmit` can be safely mutated by the caller after this call returns.
14
+ * @param revision - the revision of the commit that should be enriched
15
+ * @param getLocalCommitsSince - the local commits on this branch from oldest to newest, starting with the `revision`.
16
+ * @returns a version of the commit with updated enrichment, or undefined if this revision does not need to be resubmitted.
17
+ * A revision does not need to be resubmitted if it has already been sequenced, which can happen if it was also submitted by another client.
18
+ * Two clients can submit the same revision by both merging from the same shared branch.
19
19
  */
20
- prepareForResubmit(toResubmit: readonly GraphCommit<TChange>[]): void;
21
-
22
- /**
23
- * @returns the next commit that should be resubmitted.
24
- *
25
- * Throws when invoked outside of a resubmit phase.
26
- */
27
- peekNextCommit(): GraphCommit<TChange>;
28
-
29
- /**
30
- * Is true iff the commit enricher is currently in a resubmit phase.
31
- */
32
- readonly isInResubmitPhase: boolean;
20
+ getEnrichedCommit(
21
+ revision: RevisionTag,
22
+ getLocalCommitsSince: () => readonly GraphCommit<TChange>[],
23
+ ): GraphCommit<TChange> | undefined;
33
24
 
34
25
  /**
35
26
  * Must be when a commit is submitted or resubmitted.
@@ -48,7 +39,8 @@ export interface ResubmitMachine<TChange> {
48
39
  * Must be called after a sequenced commit is applied.
49
40
  * Note that this may be called multiples times in a row after a number of sequenced commits have been applied
50
41
  * (as opposed to always being called before the next sequenced commit is applied).
42
+ * @param revision - the revision of the sequenced commit.
51
43
  * @param isLocal - whether the sequenced commit was generated by the local session.
52
44
  */
53
- onSequencedCommitApplied(isLocal: boolean): void;
45
+ onSequencedCommitApplied(revision: RevisionTag, isLocal: boolean): void;
54
46
  }
@@ -25,7 +25,7 @@ import type {
25
25
  } from "@fluidframework/shared-object-base/internal";
26
26
  import { createChildLogger } from "@fluidframework/telemetry-utils/internal";
27
27
 
28
- import type { ICodecOptions, IJsonCodec } from "../codec/index.js";
28
+ import type { DependentFormatVersion, ICodecOptions, IJsonCodec } from "../codec/index.js";
29
29
  import {
30
30
  type ChangeFamily,
31
31
  type ChangeFamilyEditor,
@@ -51,10 +51,14 @@ import { BranchCommitEnricher } from "./branchCommitEnricher.js";
51
51
  import { type ChangeEnricherReadonlyCheckout, NoOpChangeEnricher } from "./changeEnricher.js";
52
52
  import { DefaultResubmitMachine } from "./defaultResubmitMachine.js";
53
53
  import { EditManager, minimumPossibleSequenceNumber } from "./editManager.js";
54
- import { makeEditManagerCodec } from "./editManagerCodecs.js";
54
+ import { makeEditManagerCodec, type EditManagerFormatVersion } from "./editManagerCodecs.js";
55
55
  import type { SeqNumber } from "./editManagerFormatCommons.js";
56
56
  import { EditManagerSummarizer } from "./editManagerSummarizer.js";
57
- import { type MessageEncodingContext, makeMessageCodec } from "./messageCodecs.js";
57
+ import {
58
+ type MessageEncodingContext,
59
+ type MessageFormatVersion,
60
+ makeMessageCodec,
61
+ } from "./messageCodecs.js";
58
62
  import type { DecodedMessage } from "./messageTypes.js";
59
63
  import type { ResubmitMachine } from "./resubmitMachine.js";
60
64
 
@@ -62,8 +66,8 @@ import type { ResubmitMachine } from "./resubmitMachine.js";
62
66
  const summarizablesTreeKey = "indexes";
63
67
 
64
68
  export interface ExplicitCoreCodecVersions {
65
- editManager: number;
66
- message: number;
69
+ editManager: EditManagerFormatVersion;
70
+ message: MessageFormatVersion;
67
71
  }
68
72
 
69
73
  export interface ClonableSchemaAndPolicy extends SchemaAndPolicy {
@@ -126,6 +130,8 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
126
130
  protected readonly changeFamily: ChangeFamily<TEditor, TChange>,
127
131
  options: ICodecOptions,
128
132
  formatOptions: ExplicitCoreCodecVersions,
133
+ changeFormatVersionForEditManager: DependentFormatVersion<EditManagerFormatVersion>,
134
+ changeFormatVersionForMessage: DependentFormatVersion<MessageFormatVersion>,
129
135
  protected readonly idCompressor: IIdCompressor,
130
136
  schema: TreeStoredSchemaRepository,
131
137
  schemaPolicy: SchemaPolicy,
@@ -163,6 +169,7 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
163
169
  const revisionTagCodec = new RevisionTagCodec(idCompressor);
164
170
  const editManagerCodec = makeEditManagerCodec(
165
171
  this.editManager.changeFamily.codecs,
172
+ changeFormatVersionForEditManager,
166
173
  revisionTagCodec,
167
174
  options,
168
175
  formatOptions.editManager,
@@ -183,6 +190,7 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
183
190
 
184
191
  this.messageCodec = makeMessageCodec(
185
192
  changeFamily.codecs,
193
+ changeFormatVersionForMessage,
186
194
  new RevisionTagCodec(idCompressor),
187
195
  options,
188
196
  formatOptions.message,
@@ -451,8 +459,8 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
451
459
  );
452
460
 
453
461
  // Update the resubmit machine for each commit applied.
454
- for (const _ of commits) {
455
- this.tryGetResubmitMachine(branchId)?.onSequencedCommitApplied(isLocal);
462
+ for (const commit of commits) {
463
+ this.tryGetResubmitMachine(branchId)?.onSequencedCommitApplied(commit.revision, isLocal);
456
464
  }
457
465
  }
458
466
 
@@ -500,24 +508,24 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
500
508
  } = message;
501
509
 
502
510
  const resubmitMachine = this.getResubmitMachine(branchId);
503
- // If a resubmit phase is not already in progress, then this must be the first commit of a new resubmit phase.
504
- if (resubmitMachine.isInResubmitPhase === false) {
511
+
512
+ const getLocalCommits = (): GraphCommit<TChange>[] => {
505
513
  const localCommits = this.editManager.getLocalCommits(branchId);
506
514
  const revisionIndex = localCommits.findIndex((c) => c.revision === revision);
507
515
  assert(revisionIndex >= 0, 0xbdb /* revision must exist in local commits */);
508
- const toResubmit = localCommits.slice(revisionIndex);
509
- resubmitMachine.prepareForResubmit(toResubmit);
510
- }
516
+ return localCommits.slice(revisionIndex);
517
+ };
518
+
511
519
  assert(
512
520
  isClonableSchemaPolicy(localOpMetadata),
513
521
  0x95e /* Local metadata must contain schema and policy. */,
514
522
  );
515
- assert(
516
- resubmitMachine.isInResubmitPhase !== false,
517
- 0x984 /* Invalid resubmit outside of resubmit phase */,
518
- );
519
- const enrichedCommit = resubmitMachine.peekNextCommit();
520
- this.submitCommit(branchId, enrichedCommit, localOpMetadata, true);
523
+
524
+ const enrichedCommit = resubmitMachine.getEnrichedCommit(revision, getLocalCommits);
525
+ if (enrichedCommit !== undefined) {
526
+ this.submitCommit(branchId, enrichedCommit, localOpMetadata, true);
527
+ }
528
+
521
529
  break;
522
530
  }
523
531
  case "branch": {