@fluidframework/tree 2.110.0 → 2.112.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 (598) hide show
  1. package/.vscode/settings.json +1 -0
  2. package/CHANGELOG.md +193 -0
  3. package/api-report/tree.alpha.api.md +96 -36
  4. package/api-report/tree.beta.api.md +39 -1
  5. package/api-report/tree.legacy.beta.api.md +39 -1
  6. package/api-report/tree.legacy.public.api.md +1 -1
  7. package/api-report/tree.public.api.md +1 -1
  8. package/dist/componentApi.d.ts +198 -0
  9. package/dist/componentApi.d.ts.map +1 -0
  10. package/dist/componentApi.js +138 -0
  11. package/dist/componentApi.js.map +1 -0
  12. package/dist/core/change-family/changeFamily.d.ts +3 -10
  13. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  14. package/dist/core/change-family/changeFamily.js.map +1 -1
  15. package/dist/core/rebase/types.d.ts +2 -2
  16. package/dist/core/rebase/types.js.map +1 -1
  17. package/dist/core/schema-stored/storedSchemaRepository.d.ts +2 -2
  18. package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
  19. package/dist/entrypoints/alpha.d.ts +1 -1
  20. package/dist/entrypoints/alpha.d.ts.map +1 -1
  21. package/dist/entrypoints/alpha.js +4 -2
  22. package/dist/entrypoints/alpha.js.map +1 -1
  23. package/dist/entrypoints/beta.d.ts +1 -1
  24. package/dist/entrypoints/beta.d.ts.map +1 -1
  25. package/dist/entrypoints/beta.js.map +1 -1
  26. package/dist/entrypoints/legacy.d.ts +1 -1
  27. package/dist/entrypoints/legacy.d.ts.map +1 -1
  28. package/dist/entrypoints/legacy.js.map +1 -1
  29. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -20
  30. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  31. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +13 -32
  32. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  33. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -2
  34. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  35. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  36. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +73 -28
  37. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  38. package/dist/feature-libraries/chunked-forest/codec/codecs.js +76 -9
  39. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  40. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +4 -2
  41. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  42. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +11 -0
  43. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  45. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/index.js +2 -1
  47. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  48. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts +1 -1
  49. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -1
  50. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js +3 -15
  51. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  53. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/index.js +2 -1
  55. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  56. package/dist/feature-libraries/forest-summary/codec.d.ts +3 -3
  57. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  58. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  59. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -2
  60. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  61. package/dist/feature-libraries/forest-summary/forestSummarizer.js +4 -6
  62. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  63. package/dist/feature-libraries/index.d.ts +3 -3
  64. package/dist/feature-libraries/index.d.ts.map +1 -1
  65. package/dist/feature-libraries/index.js +4 -2
  66. package/dist/feature-libraries/index.js.map +1 -1
  67. package/dist/feature-libraries/modular-schema/index.d.ts +1 -0
  68. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  69. package/dist/feature-libraries/modular-schema/index.js +3 -1
  70. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  71. package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts +25 -0
  72. package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -0
  73. package/dist/feature-libraries/modular-schema/minimizeModularChange.js +29 -0
  74. package/dist/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -0
  75. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  76. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +9 -9
  77. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  78. package/dist/feature-libraries/schemaChecker.d.ts +22 -3
  79. package/dist/feature-libraries/schemaChecker.d.ts.map +1 -1
  80. package/dist/feature-libraries/schemaChecker.js +48 -5
  81. package/dist/feature-libraries/schemaChecker.js.map +1 -1
  82. package/dist/index.d.ts +4 -3
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +6 -2
  85. package/dist/index.js.map +1 -1
  86. package/dist/packageVersion.d.ts +1 -1
  87. package/dist/packageVersion.js +1 -1
  88. package/dist/packageVersion.js.map +1 -1
  89. package/dist/shared-tree/independentView.d.ts +17 -4
  90. package/dist/shared-tree/independentView.d.ts.map +1 -1
  91. package/dist/shared-tree/independentView.js +15 -12
  92. package/dist/shared-tree/independentView.js.map +1 -1
  93. package/dist/shared-tree/index.d.ts +3 -2
  94. package/dist/shared-tree/index.d.ts.map +1 -1
  95. package/dist/shared-tree/index.js +3 -1
  96. package/dist/shared-tree/index.js.map +1 -1
  97. package/dist/shared-tree/schematizingTreeView.d.ts +6 -5
  98. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  99. package/dist/shared-tree/schematizingTreeView.js +6 -3
  100. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  101. package/dist/shared-tree/serializedChange.d.ts +41 -0
  102. package/dist/shared-tree/serializedChange.d.ts.map +1 -0
  103. package/dist/shared-tree/serializedChange.js +87 -0
  104. package/dist/shared-tree/serializedChange.js.map +1 -0
  105. package/dist/shared-tree/sharedTree.d.ts +18 -0
  106. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  107. package/dist/shared-tree/sharedTree.js +9 -4
  108. package/dist/shared-tree/sharedTree.js.map +1 -1
  109. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +7 -0
  110. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  111. package/dist/shared-tree/sharedTreeChangeFamily.js +8 -1
  112. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  113. package/dist/shared-tree/transactionMinimize.d.ts +35 -0
  114. package/dist/shared-tree/transactionMinimize.d.ts.map +1 -0
  115. package/dist/shared-tree/transactionMinimize.js +65 -0
  116. package/dist/shared-tree/transactionMinimize.js.map +1 -0
  117. package/dist/shared-tree/transactionPostProcessor.d.ts +28 -0
  118. package/dist/shared-tree/transactionPostProcessor.d.ts.map +1 -0
  119. package/dist/shared-tree/transactionPostProcessor.js +28 -0
  120. package/dist/shared-tree/transactionPostProcessor.js.map +1 -0
  121. package/dist/shared-tree/treeAlpha.js +3 -3
  122. package/dist/shared-tree/treeAlpha.js.map +1 -1
  123. package/dist/shared-tree/treeCheckout.d.ts +19 -13
  124. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  125. package/dist/shared-tree/treeCheckout.js +54 -71
  126. package/dist/shared-tree/treeCheckout.js.map +1 -1
  127. package/dist/shared-tree/unhydratedTreeContext.d.ts +5 -5
  128. package/dist/shared-tree/unhydratedTreeContext.d.ts.map +1 -1
  129. package/dist/shared-tree/unhydratedTreeContext.js.map +1 -1
  130. package/dist/shared-tree-core/editManager.d.ts +6 -3
  131. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  132. package/dist/shared-tree-core/editManager.js +35 -14
  133. package/dist/shared-tree-core/editManager.js.map +1 -1
  134. package/dist/shared-tree-core/editManagerCodecs.d.ts +3 -2
  135. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  136. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  137. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +3 -9
  138. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  139. package/dist/shared-tree-core/editManagerCodecsCommons.js +2 -4
  140. package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  141. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts +3 -3
  142. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  143. package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  144. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +3 -3
  145. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  146. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  147. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -1
  148. package/dist/shared-tree-core/editManagerFormatCommons.js +1 -1
  149. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  150. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
  151. package/dist/shared-tree-core/editManagerSummarizer.d.ts +5 -9
  152. package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  153. package/dist/shared-tree-core/editManagerSummarizer.js +5 -10
  154. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  155. package/dist/shared-tree-core/index.d.ts +1 -1
  156. package/dist/shared-tree-core/index.d.ts.map +1 -1
  157. package/dist/shared-tree-core/index.js +3 -2
  158. package/dist/shared-tree-core/index.js.map +1 -1
  159. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  160. package/dist/shared-tree-core/messageCodecVSharedBranches.js +8 -2
  161. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  162. package/dist/shared-tree-core/messageFormat.d.ts +1 -1
  163. package/dist/shared-tree-core/messageFormat.js +1 -1
  164. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  165. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts +10 -1
  166. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  167. package/dist/shared-tree-core/messageFormatVSharedBranches.js +1 -0
  168. package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  169. package/dist/shared-tree-core/messageTypes.d.ts +1 -0
  170. package/dist/shared-tree-core/messageTypes.d.ts.map +1 -1
  171. package/dist/shared-tree-core/messageTypes.js.map +1 -1
  172. package/dist/shared-tree-core/sharedTreeCore.d.ts +9 -3
  173. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  174. package/dist/shared-tree-core/sharedTreeCore.js +27 -12
  175. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  176. package/dist/shared-tree-core/transaction.d.ts +84 -9
  177. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  178. package/dist/shared-tree-core/transaction.js +88 -7
  179. package/dist/shared-tree-core/transaction.js.map +1 -1
  180. package/dist/simple-tree/api/index.d.ts +2 -2
  181. package/dist/simple-tree/api/index.d.ts.map +1 -1
  182. package/dist/simple-tree/api/index.js +2 -2
  183. package/dist/simple-tree/api/index.js.map +1 -1
  184. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -24
  185. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  186. package/dist/simple-tree/api/schemaCompatibilityTester.js +31 -44
  187. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  188. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
  189. package/dist/simple-tree/api/schemaCreationUtilities.js +3 -3
  190. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  191. package/dist/simple-tree/api/schemaFactory.d.ts +1 -1
  192. package/dist/simple-tree/api/schemaFactory.js +2 -2
  193. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  194. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +56 -15
  195. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  196. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  197. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +0 -3
  198. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  199. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  200. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +2 -2
  201. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  202. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +3 -4
  203. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  204. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  205. package/dist/simple-tree/api/storedSchema.js +1 -2
  206. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  207. package/dist/simple-tree/api/transactionTypes.d.ts +91 -28
  208. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  209. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  210. package/dist/simple-tree/api/tree.d.ts +108 -24
  211. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  212. package/dist/simple-tree/api/tree.js.map +1 -1
  213. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  214. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  215. package/dist/simple-tree/api/typesUnsafe.d.ts +2 -2
  216. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  217. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  218. package/dist/simple-tree/core/treeNodeSchema.d.ts +7 -7
  219. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  220. package/dist/simple-tree/index.d.ts +1 -1
  221. package/dist/simple-tree/index.d.ts.map +1 -1
  222. package/dist/simple-tree/index.js +2 -2
  223. package/dist/simple-tree/index.js.map +1 -1
  224. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +83 -4
  225. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  226. package/dist/simple-tree/node-kinds/array/arrayNode.js +39 -0
  227. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  228. package/dist/simple-tree/simpleSchemaFormatV1.js +1 -1
  229. package/dist/simple-tree/simpleSchemaFormatV1.js.map +1 -1
  230. package/dist/text/index.d.ts +1 -0
  231. package/dist/text/index.d.ts.map +1 -1
  232. package/dist/text/index.js +3 -1
  233. package/dist/text/index.js.map +1 -1
  234. package/dist/text/textDomainFormatted.d.ts +69 -758
  235. package/dist/text/textDomainFormatted.d.ts.map +1 -1
  236. package/dist/text/textDomainFormatted.js +275 -322
  237. package/dist/text/textDomainFormatted.js.map +1 -1
  238. package/dist/text/textDomainFormattedDefault.d.ts +273 -0
  239. package/dist/text/textDomainFormattedDefault.d.ts.map +1 -0
  240. package/dist/text/textDomainFormattedDefault.js +94 -0
  241. package/dist/text/textDomainFormattedDefault.js.map +1 -0
  242. package/dist/treeFactory.js +1 -1
  243. package/dist/treeFactory.js.map +1 -1
  244. package/dist/util/breakable.d.ts +16 -1
  245. package/dist/util/breakable.d.ts.map +1 -1
  246. package/dist/util/breakable.js +9 -1
  247. package/dist/util/breakable.js.map +1 -1
  248. package/dist/util/compressedIds.d.ts +185 -0
  249. package/dist/util/compressedIds.d.ts.map +1 -0
  250. package/dist/util/compressedIds.js +164 -0
  251. package/dist/util/compressedIds.js.map +1 -0
  252. package/dist/util/index.d.ts +2 -1
  253. package/dist/util/index.d.ts.map +1 -1
  254. package/dist/util/index.js +10 -2
  255. package/dist/util/index.js.map +1 -1
  256. package/dist/util/nestedMap.d.ts.map +1 -1
  257. package/dist/util/nestedMap.js +16 -3
  258. package/dist/util/nestedMap.js.map +1 -1
  259. package/dist/util/nestedSet.d.ts +1 -1
  260. package/dist/util/nestedSet.d.ts.map +1 -1
  261. package/dist/util/nestedSet.js.map +1 -1
  262. package/dist/util/utils.d.ts +0 -6
  263. package/dist/util/utils.d.ts.map +1 -1
  264. package/dist/util/utils.js +1 -15
  265. package/dist/util/utils.js.map +1 -1
  266. package/lib/componentApi.d.ts +198 -0
  267. package/lib/componentApi.d.ts.map +1 -0
  268. package/lib/componentApi.js +135 -0
  269. package/lib/componentApi.js.map +1 -0
  270. package/lib/core/change-family/changeFamily.d.ts +3 -10
  271. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  272. package/lib/core/change-family/changeFamily.js.map +1 -1
  273. package/lib/core/rebase/types.d.ts +2 -2
  274. package/lib/core/rebase/types.js.map +1 -1
  275. package/lib/core/schema-stored/storedSchemaRepository.d.ts +2 -2
  276. package/lib/core/schema-stored/storedSchemaRepository.js.map +1 -1
  277. package/lib/entrypoints/alpha.d.ts +1 -1
  278. package/lib/entrypoints/alpha.d.ts.map +1 -1
  279. package/lib/entrypoints/alpha.js +1 -1
  280. package/lib/entrypoints/alpha.js.map +1 -1
  281. package/lib/entrypoints/beta.d.ts +1 -1
  282. package/lib/entrypoints/beta.d.ts.map +1 -1
  283. package/lib/entrypoints/beta.js.map +1 -1
  284. package/lib/entrypoints/legacy.d.ts +1 -1
  285. package/lib/entrypoints/legacy.d.ts.map +1 -1
  286. package/lib/entrypoints/legacy.js.map +1 -1
  287. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -20
  288. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  289. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +14 -33
  290. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  291. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -2
  292. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  293. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  294. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +73 -28
  295. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  296. package/lib/feature-libraries/chunked-forest/codec/codecs.js +75 -9
  297. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  298. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +4 -2
  299. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  300. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +12 -1
  301. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  302. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  303. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  304. package/lib/feature-libraries/chunked-forest/codec/index.js +1 -1
  305. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  306. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts +1 -1
  307. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -1
  308. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js +3 -15
  309. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -1
  310. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  311. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  312. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  313. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  314. package/lib/feature-libraries/forest-summary/codec.d.ts +3 -3
  315. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  316. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  317. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -2
  318. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  319. package/lib/feature-libraries/forest-summary/forestSummarizer.js +4 -6
  320. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  321. package/lib/feature-libraries/index.d.ts +3 -3
  322. package/lib/feature-libraries/index.d.ts.map +1 -1
  323. package/lib/feature-libraries/index.js +2 -2
  324. package/lib/feature-libraries/index.js.map +1 -1
  325. package/lib/feature-libraries/modular-schema/index.d.ts +1 -0
  326. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  327. package/lib/feature-libraries/modular-schema/index.js +1 -0
  328. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  329. package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts +25 -0
  330. package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -0
  331. package/lib/feature-libraries/modular-schema/minimizeModularChange.js +25 -0
  332. package/lib/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -0
  333. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  334. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +10 -10
  335. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  336. package/lib/feature-libraries/schemaChecker.d.ts +22 -3
  337. package/lib/feature-libraries/schemaChecker.d.ts.map +1 -1
  338. package/lib/feature-libraries/schemaChecker.js +48 -5
  339. package/lib/feature-libraries/schemaChecker.js.map +1 -1
  340. package/lib/index.d.ts +4 -3
  341. package/lib/index.d.ts.map +1 -1
  342. package/lib/index.js +3 -2
  343. package/lib/index.js.map +1 -1
  344. package/lib/packageVersion.d.ts +1 -1
  345. package/lib/packageVersion.js +1 -1
  346. package/lib/packageVersion.js.map +1 -1
  347. package/lib/shared-tree/independentView.d.ts +17 -4
  348. package/lib/shared-tree/independentView.d.ts.map +1 -1
  349. package/lib/shared-tree/independentView.js +13 -10
  350. package/lib/shared-tree/independentView.js.map +1 -1
  351. package/lib/shared-tree/index.d.ts +3 -2
  352. package/lib/shared-tree/index.d.ts.map +1 -1
  353. package/lib/shared-tree/index.js +1 -0
  354. package/lib/shared-tree/index.js.map +1 -1
  355. package/lib/shared-tree/schematizingTreeView.d.ts +6 -5
  356. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  357. package/lib/shared-tree/schematizingTreeView.js +7 -4
  358. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  359. package/lib/shared-tree/serializedChange.d.ts +41 -0
  360. package/lib/shared-tree/serializedChange.d.ts.map +1 -0
  361. package/lib/shared-tree/serializedChange.js +84 -0
  362. package/lib/shared-tree/serializedChange.js.map +1 -0
  363. package/lib/shared-tree/sharedTree.d.ts +18 -0
  364. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  365. package/lib/shared-tree/sharedTree.js +10 -5
  366. package/lib/shared-tree/sharedTree.js.map +1 -1
  367. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +7 -0
  368. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  369. package/lib/shared-tree/sharedTreeChangeFamily.js +7 -1
  370. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  371. package/lib/shared-tree/transactionMinimize.d.ts +35 -0
  372. package/lib/shared-tree/transactionMinimize.d.ts.map +1 -0
  373. package/lib/shared-tree/transactionMinimize.js +62 -0
  374. package/lib/shared-tree/transactionMinimize.js.map +1 -0
  375. package/lib/shared-tree/transactionPostProcessor.d.ts +28 -0
  376. package/lib/shared-tree/transactionPostProcessor.d.ts.map +1 -0
  377. package/lib/shared-tree/transactionPostProcessor.js +23 -0
  378. package/lib/shared-tree/transactionPostProcessor.js.map +1 -0
  379. package/lib/shared-tree/treeAlpha.js +3 -3
  380. package/lib/shared-tree/treeAlpha.js.map +1 -1
  381. package/lib/shared-tree/treeCheckout.d.ts +19 -13
  382. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  383. package/lib/shared-tree/treeCheckout.js +36 -53
  384. package/lib/shared-tree/treeCheckout.js.map +1 -1
  385. package/lib/shared-tree/unhydratedTreeContext.d.ts +5 -5
  386. package/lib/shared-tree/unhydratedTreeContext.d.ts.map +1 -1
  387. package/lib/shared-tree/unhydratedTreeContext.js.map +1 -1
  388. package/lib/shared-tree-core/editManager.d.ts +6 -3
  389. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  390. package/lib/shared-tree-core/editManager.js +36 -15
  391. package/lib/shared-tree-core/editManager.js.map +1 -1
  392. package/lib/shared-tree-core/editManagerCodecs.d.ts +3 -2
  393. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  394. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  395. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +3 -9
  396. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  397. package/lib/shared-tree-core/editManagerCodecsCommons.js +3 -5
  398. package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  399. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts +3 -3
  400. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  401. package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  402. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +3 -3
  403. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  404. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  405. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -1
  406. package/lib/shared-tree-core/editManagerFormatCommons.js +1 -1
  407. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  408. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
  409. package/lib/shared-tree-core/editManagerSummarizer.d.ts +5 -9
  410. package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  411. package/lib/shared-tree-core/editManagerSummarizer.js +5 -10
  412. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  413. package/lib/shared-tree-core/index.d.ts +1 -1
  414. package/lib/shared-tree-core/index.d.ts.map +1 -1
  415. package/lib/shared-tree-core/index.js +1 -1
  416. package/lib/shared-tree-core/index.js.map +1 -1
  417. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  418. package/lib/shared-tree-core/messageCodecVSharedBranches.js +8 -2
  419. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  420. package/lib/shared-tree-core/messageFormat.d.ts +1 -1
  421. package/lib/shared-tree-core/messageFormat.js +1 -1
  422. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  423. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts +10 -1
  424. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  425. package/lib/shared-tree-core/messageFormatVSharedBranches.js +1 -0
  426. package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  427. package/lib/shared-tree-core/messageTypes.d.ts +1 -0
  428. package/lib/shared-tree-core/messageTypes.d.ts.map +1 -1
  429. package/lib/shared-tree-core/messageTypes.js.map +1 -1
  430. package/lib/shared-tree-core/sharedTreeCore.d.ts +9 -3
  431. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  432. package/lib/shared-tree-core/sharedTreeCore.js +28 -13
  433. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  434. package/lib/shared-tree-core/transaction.d.ts +84 -9
  435. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  436. package/lib/shared-tree-core/transaction.js +87 -6
  437. package/lib/shared-tree-core/transaction.js.map +1 -1
  438. package/lib/simple-tree/api/index.d.ts +2 -2
  439. package/lib/simple-tree/api/index.d.ts.map +1 -1
  440. package/lib/simple-tree/api/index.js +1 -1
  441. package/lib/simple-tree/api/index.js.map +1 -1
  442. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -24
  443. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  444. package/lib/simple-tree/api/schemaCompatibilityTester.js +29 -42
  445. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  446. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
  447. package/lib/simple-tree/api/schemaCreationUtilities.js +3 -3
  448. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  449. package/lib/simple-tree/api/schemaFactory.d.ts +1 -1
  450. package/lib/simple-tree/api/schemaFactory.js +2 -2
  451. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  452. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +56 -15
  453. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  454. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  455. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +0 -3
  456. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  457. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  458. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +2 -2
  459. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  460. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +4 -5
  461. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  462. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  463. package/lib/simple-tree/api/storedSchema.js +2 -3
  464. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  465. package/lib/simple-tree/api/transactionTypes.d.ts +91 -28
  466. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  467. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  468. package/lib/simple-tree/api/tree.d.ts +108 -24
  469. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  470. package/lib/simple-tree/api/tree.js.map +1 -1
  471. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  472. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  473. package/lib/simple-tree/api/typesUnsafe.d.ts +2 -2
  474. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  475. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  476. package/lib/simple-tree/core/treeNodeSchema.d.ts +7 -7
  477. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  478. package/lib/simple-tree/index.d.ts +1 -1
  479. package/lib/simple-tree/index.d.ts.map +1 -1
  480. package/lib/simple-tree/index.js +1 -1
  481. package/lib/simple-tree/index.js.map +1 -1
  482. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +83 -4
  483. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  484. package/lib/simple-tree/node-kinds/array/arrayNode.js +39 -0
  485. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  486. package/lib/simple-tree/simpleSchemaFormatV1.js +1 -1
  487. package/lib/simple-tree/simpleSchemaFormatV1.js.map +1 -1
  488. package/lib/text/index.d.ts +1 -0
  489. package/lib/text/index.d.ts.map +1 -1
  490. package/lib/text/index.js +1 -0
  491. package/lib/text/index.js.map +1 -1
  492. package/lib/text/textDomainFormatted.d.ts +69 -758
  493. package/lib/text/textDomainFormatted.d.ts.map +1 -1
  494. package/lib/text/textDomainFormatted.js +277 -324
  495. package/lib/text/textDomainFormatted.js.map +1 -1
  496. package/lib/text/textDomainFormattedDefault.d.ts +273 -0
  497. package/lib/text/textDomainFormattedDefault.d.ts.map +1 -0
  498. package/lib/text/textDomainFormattedDefault.js +91 -0
  499. package/lib/text/textDomainFormattedDefault.js.map +1 -0
  500. package/lib/treeFactory.js +1 -1
  501. package/lib/treeFactory.js.map +1 -1
  502. package/lib/util/breakable.d.ts +16 -1
  503. package/lib/util/breakable.d.ts.map +1 -1
  504. package/lib/util/breakable.js +9 -1
  505. package/lib/util/breakable.js.map +1 -1
  506. package/lib/util/compressedIds.d.ts +185 -0
  507. package/lib/util/compressedIds.d.ts.map +1 -0
  508. package/lib/util/compressedIds.js +154 -0
  509. package/lib/util/compressedIds.js.map +1 -0
  510. package/lib/util/index.d.ts +2 -1
  511. package/lib/util/index.d.ts.map +1 -1
  512. package/lib/util/index.js +2 -1
  513. package/lib/util/index.js.map +1 -1
  514. package/lib/util/nestedMap.d.ts.map +1 -1
  515. package/lib/util/nestedMap.js +17 -4
  516. package/lib/util/nestedMap.js.map +1 -1
  517. package/lib/util/nestedSet.d.ts +1 -1
  518. package/lib/util/nestedSet.d.ts.map +1 -1
  519. package/lib/util/nestedSet.js.map +1 -1
  520. package/lib/util/utils.d.ts +0 -6
  521. package/lib/util/utils.d.ts.map +1 -1
  522. package/lib/util/utils.js +0 -13
  523. package/lib/util/utils.js.map +1 -1
  524. package/package.json +23 -23
  525. package/src/componentApi.ts +354 -0
  526. package/src/core/change-family/changeFamily.ts +3 -12
  527. package/src/core/rebase/types.ts +2 -2
  528. package/src/core/schema-stored/storedSchemaRepository.ts +2 -2
  529. package/src/entrypoints/alpha.ts +15 -8
  530. package/src/entrypoints/beta.ts +8 -0
  531. package/src/entrypoints/legacy.ts +8 -0
  532. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +22 -72
  533. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -2
  534. package/src/feature-libraries/chunked-forest/codec/codecs.ts +110 -41
  535. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +32 -4
  536. package/src/feature-libraries/chunked-forest/codec/index.ts +1 -0
  537. package/src/feature-libraries/chunked-forest/codec/nodeEncoder.ts +7 -19
  538. package/src/feature-libraries/chunked-forest/index.ts +3 -0
  539. package/src/feature-libraries/forest-summary/codec.ts +5 -3
  540. package/src/feature-libraries/forest-summary/forestSummarizer.ts +4 -5
  541. package/src/feature-libraries/index.ts +5 -0
  542. package/src/feature-libraries/modular-schema/index.ts +1 -0
  543. package/src/feature-libraries/modular-schema/minimizeModularChange.ts +33 -0
  544. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +13 -9
  545. package/src/feature-libraries/schemaChecker.ts +86 -9
  546. package/src/index.ts +16 -8
  547. package/src/packageVersion.ts +1 -1
  548. package/src/shared-tree/independentView.ts +40 -15
  549. package/src/shared-tree/index.ts +4 -0
  550. package/src/shared-tree/schematizingTreeView.ts +40 -30
  551. package/src/shared-tree/serializedChange.ts +127 -0
  552. package/src/shared-tree/sharedTree.ts +32 -4
  553. package/src/shared-tree/sharedTreeChangeFamily.ts +7 -1
  554. package/src/shared-tree/transactionMinimize.ts +74 -0
  555. package/src/shared-tree/transactionPostProcessor.ts +40 -0
  556. package/src/shared-tree/treeAlpha.ts +3 -3
  557. package/src/shared-tree/treeCheckout.ts +103 -101
  558. package/src/shared-tree/unhydratedTreeContext.ts +18 -15
  559. package/src/shared-tree-core/editManager.ts +42 -6
  560. package/src/shared-tree-core/editManagerCodecs.ts +3 -2
  561. package/src/shared-tree-core/editManagerCodecsCommons.ts +10 -14
  562. package/src/shared-tree-core/editManagerCodecsV1toV4.ts +3 -2
  563. package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +3 -2
  564. package/src/shared-tree-core/editManagerFormatCommons.ts +1 -1
  565. package/src/shared-tree-core/editManagerSummarizer.ts +5 -9
  566. package/src/shared-tree-core/index.ts +8 -5
  567. package/src/shared-tree-core/messageCodecVSharedBranches.ts +8 -1
  568. package/src/shared-tree-core/messageFormat.ts +1 -1
  569. package/src/shared-tree-core/messageFormatVSharedBranches.ts +10 -0
  570. package/src/shared-tree-core/messageTypes.ts +1 -0
  571. package/src/shared-tree-core/sharedTreeCore.ts +36 -12
  572. package/src/shared-tree-core/transaction.ts +165 -18
  573. package/src/simple-tree/api/index.ts +14 -10
  574. package/src/simple-tree/api/schemaCompatibilityTester.ts +36 -48
  575. package/src/simple-tree/api/schemaCreationUtilities.ts +3 -3
  576. package/src/simple-tree/api/schemaFactory.ts +2 -2
  577. package/src/simple-tree/api/schemaFactoryAlpha.ts +56 -15
  578. package/src/simple-tree/api/schemaFactoryBeta.ts +0 -3
  579. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +4 -5
  580. package/src/simple-tree/api/storedSchema.ts +2 -3
  581. package/src/simple-tree/api/transactionTypes.ts +111 -39
  582. package/src/simple-tree/api/tree.ts +165 -49
  583. package/src/simple-tree/api/treeBeta.ts +2 -0
  584. package/src/simple-tree/api/typesUnsafe.ts +2 -1
  585. package/src/simple-tree/core/treeNodeSchema.ts +7 -7
  586. package/src/simple-tree/index.ts +13 -9
  587. package/src/simple-tree/node-kinds/array/arrayNode.ts +168 -4
  588. package/src/simple-tree/simpleSchemaFormatV1.ts +1 -1
  589. package/src/text/index.ts +1 -0
  590. package/src/text/textDomainFormatted.ts +520 -415
  591. package/src/text/textDomainFormattedDefault.ts +150 -0
  592. package/src/treeFactory.ts +1 -1
  593. package/src/util/breakable.ts +8 -1
  594. package/src/util/compressedIds.ts +304 -0
  595. package/src/util/index.ts +18 -1
  596. package/src/util/nestedMap.ts +21 -4
  597. package/src/util/nestedSet.ts +1 -1
  598. package/src/util/utils.ts +0 -18
@@ -7,7 +7,7 @@ import { assert } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import type { DiscriminatedUnionDispatcher } from "../../../codec/index.js";
9
9
  import type { TreeChunk } from "../../../core/index.js";
10
- import type { BrandedType } from "../../../util/index.js";
10
+ import type { BrandedType, IdDecodingContext } from "../../../util/index.js";
11
11
 
12
12
  import {
13
13
  type ChunkDecoder,
@@ -15,7 +15,6 @@ import {
15
15
  getChecked,
16
16
  readStream,
17
17
  } from "./chunkCodecUtilities.js";
18
- import type { IdDecodingContext } from "./chunkDecoding.js";
19
18
  import type { IncrementalDecoder } from "./codecs.js";
20
19
  import type { EncodedFieldBatchGeneric, IdentifierOrIndex } from "./format/index.js";
21
20
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
7
- import type { IIdCompressor, SessionId } from "@fluidframework/id-compressor";
7
+ import type { IIdCompressor } from "@fluidframework/id-compressor";
8
8
  import { lowestMinVersionForCollab } from "@fluidframework/runtime-utils/internal";
9
9
  import type { TSchema } from "@sinclair/typebox";
10
10
 
@@ -22,7 +22,13 @@ import {
22
22
  type StoredSchemaCollection,
23
23
  type TreeChunk,
24
24
  } from "../../../core/index.js";
25
- import { brandedNumberType, type Brand } from "../../../util/index.js";
25
+ import {
26
+ brandedNumberType,
27
+ IdDecodingContext,
28
+ type Brand,
29
+ type IdDecoderOptionsOriginatorless,
30
+ type IdDecoderOptionsWithOriginator,
31
+ } from "../../../util/index.js";
26
32
  import { TreeCompressionStrategy } from "../../treeCompressionUtils.js";
27
33
 
28
34
  import { decode } from "./chunkDecoding.js";
@@ -97,44 +103,116 @@ export interface IncrementalDecoder {
97
103
  */
98
104
  export interface IncrementalEncoderDecoder extends IncrementalEncoder, IncrementalDecoder {}
99
105
 
106
+ /**
107
+ * Encode-side context for {@link FieldBatchCodec}.
108
+ *
109
+ * Carries only the data the encoder actually consumes. Originator-session
110
+ * lookup, heal flags, and the incremental *decoder* live on
111
+ * {@link FieldBatchDecodingContext}.
112
+ */
100
113
  export interface FieldBatchEncodingContext {
101
114
  readonly encodeType: TreeCompressionStrategy;
102
115
  readonly idCompressor: IIdCompressor;
103
- readonly originatorId: SessionId;
104
116
  readonly schema?: SchemaAndPolicy;
105
117
  /**
106
- * An encoder / decoder for encoding and decoding of incremental fields.
107
- * This will be defined if incremental encoding is supported and enabled.
118
+ * Encoder for incremental fields. Defined when incremental encoding is
119
+ * supported and enabled.
108
120
  */
109
- readonly incrementalEncoderDecoder?: IncrementalEncoderDecoder;
121
+ readonly incrementalEncoder?: IncrementalEncoder;
110
122
  /**
111
- * `true` when encoding to or decoding from a summary blob. `false` for
112
- * op-stream encode/decode paths and for utility encoders that are not
113
- * tied to a persisted document. Healing behavior is gated on this flag.
123
+ * `true` when encoding to a summary blob. `false` for op-stream encode
124
+ * paths and for utility encoders that aren't tied to a persisted document.
125
+ *
126
+ * @remarks
127
+ * Used by the node encoder to decide whether non-finalized op-space ids
128
+ * can be written into the batch (they can't, for summaries).
114
129
  */
115
130
  readonly isSummary: boolean;
131
+ }
132
+
133
+ /**
134
+ * Decode-side context for {@link FieldBatchCodec}.
135
+ *
136
+ * Carries the per-call `resolveEncodedId` function that encapsulates the
137
+ * originator-session lookup and (for the forest-summarizer's legacy heal path)
138
+ * the deterministic UUIDv5 synthesis. Heal and originator-session flags live
139
+ * inside that function, not on this context.
140
+ *
141
+ * Constructed via one of the two named static factories — {@link forOp} or
142
+ * {@link forSummary} — depending on the call site's semantics. The constructor
143
+ * is private; there is no general-purpose builder, because the choice between
144
+ * op-style and summary-style decoding is load-bearing (different invariants
145
+ * apply, and bugs in this area are typically the result of conflating them).
146
+ */
147
+ export class FieldBatchDecodingContext extends IdDecodingContext {
148
+ private constructor(
149
+ private readonly options: IdDecoderOptionsOriginatorless | IdDecoderOptionsWithOriginator,
150
+ /**
151
+ * Decoder for incremental fields. Defined when the encoded batch contains
152
+ * incremental chunks. Only populated on summary-style contexts; op-style
153
+ * contexts always have this undefined.
154
+ */
155
+ public readonly incrementalDecoder?: IncrementalDecoder,
156
+ ) {
157
+ super(options);
158
+ }
159
+
116
160
  /**
117
- * If `true`, when an op-space compressed ID encountered while decoding
118
- * cannot be resolved by the local id-compressor (e.g. the attach-summary
119
- * blob's originator session state was stripped), a deterministic stable
120
- * UUID derived from `sharedObjectId` is returned instead of throwing.
121
- * @remarks
122
- * Off by default. Used only to recover documents whose attach summary was
123
- * written with non-finalized op-space IDs before the encode-side fix
124
- * shipped. Only takes effect when `isSummary` is also `true`.
125
- * See {@link SharedTreeOptionsBeta.healUnresolvableIdentifiersOnDecode}.
161
+ * Construct a decode context for an op.
162
+ *
163
+ * The originator is the session that produced the encoded form (carried
164
+ * alongside the op envelope by the caller). Heal-on-decode is *not*
165
+ * available — an unresolvable id during op decode indicates a real bug,
166
+ * not a recoverable state, so the resolver throws rather than synthesizing
167
+ * a UUID. Incremental decoding is not used for ops.
126
168
  */
127
- readonly healUnresolvableIdentifiersOnDecode?: boolean;
169
+ public static forOp(options: IdDecoderOptionsWithOriginator): FieldBatchDecodingContext {
170
+ return new FieldBatchDecodingContext(options);
171
+ }
172
+
128
173
  /**
129
- * The SharedTree's shared-object id, used as input to the deterministic
130
- * UUID derivation when `healUnresolvableIdentifiersOnDecode` triggers. Required
131
- * for that path; ignored otherwise.
132
- * @remarks
133
- * This allows us to ensure that multiple attaches,
134
- * in the same or different documents, with the same session offsets, get different UUIDs.
174
+ * Construct a decode context for a summary blob.
175
+ *
176
+ * Summaries must contain only ids resolvable without an originator — either
177
+ * finalized op-space ids, or (when {@link IdentifierHealingConfig} is supplied
178
+ * via `healing`) non-final ids that get healed into deterministic UUIDv5
179
+ * strings. Incremental decoding is attached via {@link withIncrementalDecoder}.
180
+ *
181
+ * @privateRemarks
182
+ * In the future (if adding a summary format which includes the session id),
183
+ * this could allow providing an originator ID to allow for op-space compressed identifiers in attach summaries.
184
+ * Non-attach summaries should only have finalized compressed identifiers (due to only being made by summary clients which never allocate identifiers since they never edit).
185
+ * Since only non-attach summaries can be incremental, incremental summaries should never have non finalized identifiers.
186
+ * `withIncrementalDecoder` has logic to guard against cases which expect session-relative identifiers in incremental chunks,
187
+ * as does the encoding-side assert in the {@link EncoderContext}.
188
+ */
189
+ public static forSummary(
190
+ options: IdDecoderOptionsOriginatorless | IdDecoderOptionsWithOriginator,
191
+ ): FieldBatchDecodingContext {
192
+ return new FieldBatchDecodingContext(options);
193
+ }
194
+
195
+ /**
196
+ * Returns a copy of this context with `incrementalDecoder` swapped in. Used by
197
+ * the forest summarizer to attach the per-call incremental builder to a base
198
+ * decode context.
135
199
  */
136
- readonly sharedObjectId?: string;
200
+ public withIncrementalDecoder(
201
+ incrementalDecoder: IncrementalDecoder,
202
+ ): FieldBatchDecodingContext {
203
+ // As different incremental chunks may come from different sessions,
204
+ // for now we simply enforce that we do not provide an originator session ID
205
+ // when we might be dealing with incremental chunks.
206
+ // This mitigates the risk of using incorrect originator session ID identifiers in incremental chunks.
207
+ // See also private remarks on forSummary.
208
+ assert(
209
+ !this.hasOriginatorSessionId,
210
+ 0xd0c /* withIncrementalDecoder can only be called on contexts without an originator session ID */,
211
+ );
212
+ return new FieldBatchDecodingContext(this.options, incrementalDecoder);
213
+ }
137
214
  }
215
+
138
216
  /**
139
217
  * @remarks
140
218
  * Fields in this batch currently don't have field schema for the root, which limits optimizations.
@@ -142,7 +220,8 @@ export interface FieldBatchEncodingContext {
142
220
  export type FieldBatchCodec = VersionDispatchingCodec<
143
221
  FieldBatch,
144
222
  FieldBatchEncodingContext,
145
- FieldBatchFormatVersion
223
+ FieldBatchFormatVersion,
224
+ FieldBatchDecodingContext
146
225
  >;
147
226
 
148
227
  /**
@@ -160,7 +239,7 @@ function makeFieldBatchCodecForVersion(
160
239
  isSummary: boolean,
161
240
  ) => EncodedFieldBatchV1OrV2,
162
241
  encodedFieldBatchType: TSchema,
163
- ): CodecAndSchema<FieldBatch, FieldBatchEncodingContext> {
242
+ ): CodecAndSchema<FieldBatch, FieldBatchEncodingContext, FieldBatchDecodingContext> {
164
243
  return {
165
244
  encode: (
166
245
  data: FieldBatch,
@@ -185,7 +264,7 @@ function makeFieldBatchCodecForVersion(
185
264
  0xca0 /* Unsupported FieldBatchFormatVersion for incremental encoding; must be v2 or higher */,
186
265
  );
187
266
  // Incremental encoding is only supported for CompressedIncremental.
188
- incrementalEncoder = context.incrementalEncoderDecoder;
267
+ incrementalEncoder = context.incrementalEncoder;
189
268
  }
190
269
  // fallthrough
191
270
  case TreeCompressionStrategy.Compressed: {
@@ -216,20 +295,10 @@ function makeFieldBatchCodecForVersion(
216
295
  },
217
296
  decode: (
218
297
  data: EncodedFieldBatchV1OrV2,
219
- context: FieldBatchEncodingContext,
298
+ context: FieldBatchDecodingContext,
220
299
  ): FieldBatch => {
221
300
  // TODO: consider checking data is in schema.
222
- return decode(
223
- data,
224
- {
225
- idCompressor: context.idCompressor,
226
- originatorId: context.originatorId,
227
- isSummary: context.isSummary,
228
- healUnresolvableIdentifiersOnDecode: context.healUnresolvableIdentifiersOnDecode,
229
- sharedObjectId: context.sharedObjectId,
230
- },
231
- context.incrementalEncoderDecoder,
232
- ).map((chunk) => chunk.cursor());
301
+ return decode(data, context, context.incrementalDecoder).map((chunk) => chunk.cursor());
233
302
  },
234
303
  schema: encodedFieldBatchType,
235
304
  };
@@ -18,7 +18,13 @@ import {
18
18
  type Value,
19
19
  forEachNode,
20
20
  } from "../../../core/index.js";
21
- import { getOrCreate } from "../../../util/index.js";
21
+ import {
22
+ EncodedIdType,
23
+ encodePossiblyCompressedId,
24
+ getOrCreate,
25
+ type EncodedId,
26
+ type IdEncodingContext,
27
+ } from "../../../util/index.js";
22
28
 
23
29
  import type { Counter, DeduplicationTable } from "./chunkCodecUtilities.js";
24
30
  import {
@@ -520,7 +526,9 @@ export function encodeValue(
520
526
  * - Singletons defined in a static scope.
521
527
  * - Cached in this object for future reuse such that all equivalent Shapes are deduplicated.
522
528
  */
523
- export class EncoderContext implements NodeEncodeBuilder, FieldEncodeBuilder {
529
+ export class EncoderContext
530
+ implements NodeEncodeBuilder, FieldEncodeBuilder, IdEncodingContext
531
+ {
524
532
  private readonly nodeEncodersFromSchema: Map<TreeNodeSchemaIdentifier, NodeEncoder> =
525
533
  new Map();
526
534
  private readonly nestedArrayEncoders: Map<NodeEncoder, NestedArrayEncoder> = new Map();
@@ -528,7 +536,7 @@ export class EncoderContext implements NodeEncodeBuilder, FieldEncodeBuilder {
528
536
  private readonly nodeEncoderFromPolicy: NodeEncoderPolicy,
529
537
  private readonly fieldEncoderFromPolicy: FieldEncoderPolicy,
530
538
  public readonly fieldShapes: ReadonlyMap<FieldKindIdentifier, FieldKindData>,
531
- public readonly idCompressor: IIdCompressor,
539
+ private readonly idCompressor: IIdCompressor,
532
540
  /**
533
541
  * To be used to encode incremental chunks, if any.
534
542
  * @remarks
@@ -540,7 +548,27 @@ export class EncoderContext implements NodeEncodeBuilder, FieldEncodeBuilder {
540
548
  * See {@link FieldBatchEncodingContext.isSummary}.
541
549
  */
542
550
  public readonly isSummary: boolean,
543
- ) {}
551
+ ) {
552
+ // Currently we never include originator-dependent identifiers in summaries
553
+ // (there was a bug which violated this for attach-summaries: it has been fixed, see `IdentifierHealingConfig`).
554
+ // If that ever changes (to allow better compressed attach summaries), we need to take special care with incremental summaries.
555
+ // This assert guards against data corruption leaking in via missing session information in incremental summaries,
556
+ // protecting from bugs of potential future optimizations to attach summaries applied to non-attach summaries.
557
+ // Incremental summaries should have no need for originator-dependent identifiers,
558
+ // as they can't be attach summaries which are the only ones which should ever have non-final ids.
559
+ assert(
560
+ isSummary || incrementalEncoder === undefined,
561
+ 0xd0d /* incrementalEncoder cannot be used when encoding originator-dependent identifiers */,
562
+ );
563
+ }
564
+
565
+ public encodePossiblyCompressedId(id: string): string | EncodedId<EncodedIdType> {
566
+ return encodePossiblyCompressedId(
567
+ id,
568
+ this.idCompressor,
569
+ this.isSummary ? EncodedIdType.Originatorless : EncodedIdType.OriginatorDependent,
570
+ );
571
+ }
544
572
 
545
573
  public nodeEncoderFromSchema(schemaName: TreeNodeSchemaIdentifier): NodeEncoder {
546
574
  return getOrCreate(this.nodeEncodersFromSchema, schemaName, () =>
@@ -13,6 +13,7 @@ export type { FieldBatch } from "./fieldBatch.js";
13
13
  export {
14
14
  type FieldBatchCodec,
15
15
  fieldBatchCodecBuilder,
16
+ FieldBatchDecodingContext,
16
17
  type FieldBatchEncodingContext,
17
18
  type IncrementalEncoderDecoder,
18
19
  type IncrementalEncoder,
@@ -4,7 +4,6 @@
4
4
  */
5
5
 
6
6
  import { assert, fail } from "@fluidframework/core-utils/internal";
7
- import { isFinalId, isStableId } from "@fluidframework/id-compressor/internal";
8
7
 
9
8
  import {
10
9
  type FieldKey,
@@ -24,10 +23,11 @@ import {
24
23
  type NodeEncoder,
25
24
  encodeValue,
26
25
  } from "./compressedEncode.js";
27
- import type {
28
- EncodedChunkShape,
29
- EncodedFieldShape,
30
- EncodedValueShape,
26
+ import {
27
+ SpecialField,
28
+ type EncodedChunkShape,
29
+ type EncodedFieldShape,
30
+ type EncodedValueShape,
31
31
  } from "./format/index.js";
32
32
 
33
33
  /**
@@ -69,21 +69,9 @@ export class NodeShapeBasedEncoder extends Shape<EncodedChunkShape> implements N
69
69
  }
70
70
 
71
71
  private getValueToEncode(cursor: ITreeCursorSynchronous, context: EncoderContext): Value {
72
- if (this.value === 0) {
72
+ if (this.value === SpecialField.Identifier) {
73
73
  assert(typeof cursor.value === "string", 0x9aa /* identifier must be type string */);
74
- if (isStableId(cursor.value)) {
75
- const sessionSpaceCompressedId = context.idCompressor.tryRecompress(cursor.value);
76
- if (sessionSpaceCompressedId !== undefined) {
77
- const opSpaceId = context.idCompressor.normalizeToOpSpace(sessionSpaceCompressedId);
78
- // Summaries can only contain finalized op-space ids unless they also include the originator's session id somewhere.
79
- // This is not the case for forest summaries at the time of writing, so non-finalized ids are instead written using
80
- // their long form (by falling through to the original cursor value).
81
- // A scenario where such ids can appear in the summary is in the attach summary of a tree being attached to an already-attached container.
82
- if (!context.isSummary || isFinalId(opSpaceId)) {
83
- return opSpaceId;
84
- }
85
- }
86
- }
74
+ return context.encodePossiblyCompressedId(cursor.value);
87
75
  }
88
76
  return cursor.value;
89
77
  }
@@ -20,7 +20,10 @@ export {
20
20
  type FieldBatch,
21
21
  type FieldBatchCodec,
22
22
  fieldBatchCodecBuilder,
23
+ FieldBatchDecodingContext,
23
24
  type FieldBatchEncodingContext,
25
+ type IncrementalDecoder,
26
+ type IncrementalEncoder,
24
27
  type IncrementalEncoderDecoder,
25
28
  type ChunkReferenceId,
26
29
  type IncrementalEncodingPolicy,
@@ -16,6 +16,7 @@ import {
16
16
  import type { FieldKey, ITreeCursorSynchronous } from "../../core/index.js";
17
17
  import {
18
18
  fieldBatchCodecBuilder,
19
+ type FieldBatchDecodingContext,
19
20
  type FieldBatchEncodingContext,
20
21
  } from "../chunked-forest/index.js";
21
22
 
@@ -28,13 +29,14 @@ export type FieldSet = ReadonlyMap<FieldKey, ITreeCursorSynchronous>;
28
29
  export type ForestCodec = VersionDispatchingCodec<
29
30
  FieldSet,
30
31
  FieldBatchEncodingContext,
31
- ForestFormatVersion
32
+ ForestFormatVersion,
33
+ FieldBatchDecodingContext
32
34
  >;
33
35
 
34
36
  function makeForestSummarizerCodec(
35
37
  options: CodecWriteOptions,
36
38
  version: ForestFormatVersion,
37
- ): CodecAndSchema<FieldSet, FieldBatchEncodingContext> {
39
+ ): CodecAndSchema<FieldSet, FieldBatchEncodingContext, FieldBatchDecodingContext> {
38
40
  // Performance: Since multiple places (including multiple versions of this codec) use the field batch codec,
39
41
  // we may end up with multiple copies of it, including compiling its format validation multiple times.
40
42
  // This is not ideal, but is not too bad as it is a small fixed number of copies and thus should not be too expensive.
@@ -55,7 +57,7 @@ function makeForestSummarizerCodec(
55
57
  version,
56
58
  };
57
59
  },
58
- decode: (data: FormatCommon, context: FieldBatchEncodingContext): FieldSet => {
60
+ decode: (data: FormatCommon, context: FieldBatchDecodingContext): FieldSet => {
59
61
  const out: Map<FieldKey, ITreeCursorSynchronous> = new Map();
60
62
  const fields = fieldBatchCodec.decode(data.fields, context);
61
63
  assert(data.keys.length === fields.length, 0x891 /* mismatched lengths */);
@@ -41,6 +41,7 @@ import {
41
41
  import { chunkFieldSingle, defaultChunkPolicy } from "../chunked-forest/chunkTree.js";
42
42
  import {
43
43
  defaultIncrementalEncodingPolicy,
44
+ type FieldBatchDecodingContext,
44
45
  type FieldBatchEncodingContext,
45
46
  type IncrementalEncodingPolicy,
46
47
  } from "../chunked-forest/index.js";
@@ -80,6 +81,7 @@ export class ForestSummarizer
80
81
  private readonly forest: IEditableForest,
81
82
  private readonly revisionTagCodec: RevisionTagCodec,
82
83
  private readonly encoderContext: FieldBatchEncodingContext,
84
+ private readonly decoderContext: FieldBatchDecodingContext,
83
85
  options: CodecWriteOptions,
84
86
  private readonly idCompressor: IIdCompressor,
85
87
  initialSequenceNumber: number,
@@ -160,7 +162,7 @@ export class ForestSummarizer
160
162
  });
161
163
  const encoderContext: FieldBatchEncodingContext = {
162
164
  ...this.encoderContext,
163
- incrementalEncoderDecoder:
165
+ incrementalEncoder:
164
166
  incrementalSummaryBehavior === ForestIncrementalSummaryBehavior.Incremental
165
167
  ? this.incrementalSummaryBuilder
166
168
  : undefined,
@@ -212,10 +214,7 @@ export class ForestSummarizer
212
214
  parse,
213
215
  // TODO: this type cast assumes there are no handles, which should probably be enforced at runtime or the need for this cast should be removed altogether.
214
216
  )) as JsonCompatibleReadOnly,
215
- {
216
- ...this.encoderContext,
217
- incrementalEncoderDecoder: this.incrementalSummaryBuilder,
218
- },
217
+ this.decoderContext.withIncrementalDecoder(this.incrementalSummaryBuilder),
219
218
  );
220
219
  const allocator = idAllocatorFromMaxId();
221
220
  const fieldChanges: [FieldKey, DeltaFieldChanges][] = [];
@@ -93,6 +93,7 @@ export {
93
93
  isNeverTree,
94
94
  DefaultRevisionReplacer,
95
95
  ModularChangeFormatVersion,
96
+ minimizeModularChangeset,
96
97
  } from "./modular-schema/index.js";
97
98
 
98
99
  export { mapRootChanges } from "./deltaUtils.js";
@@ -109,11 +110,14 @@ export {
109
110
  FieldBatchFormatVersion,
110
111
  makeTreeChunker,
111
112
  fieldBatchCodecBuilder,
113
+ FieldBatchDecodingContext,
112
114
  type FieldBatchEncodingContext,
113
115
  emptyChunk,
114
116
  combineChunks,
115
117
  type IncrementalEncodingPolicy,
116
118
  defaultIncrementalEncodingPolicy,
119
+ type IncrementalDecoder,
120
+ type IncrementalEncoder,
117
121
  } from "./chunked-forest/index.js";
118
122
 
119
123
  export {
@@ -146,6 +150,7 @@ export {
146
150
 
147
151
  export {
148
152
  SchemaValidationError,
153
+ type SchemaValidationErrorContext,
149
154
  isNodeInSchema,
150
155
  isFieldInSchema,
151
156
  throwOutOfSchema,
@@ -83,3 +83,4 @@ export type {
83
83
  FieldKindConfigurationEntry,
84
84
  } from "./fieldKindConfiguration.js";
85
85
  export { DefaultRevisionReplacer } from "./defaultRevisionReplacer.js";
86
+ export { minimizeModularChangeset } from "./minimizeModularChange.js";
@@ -0,0 +1,33 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type { FieldKindIdentifier } from "../../core/index.js";
7
+
8
+ import type { FlexFieldKind } from "./fieldKind.js";
9
+ import type { ModularChangeset } from "./modularChangeTypes.js";
10
+
11
+ /**
12
+ * "Minimizes" a {@link ModularChangeset} so that it contains no extraneous
13
+ * information, i.e. no new content that isn't observable from document tree
14
+ * and no edits without net observed effect on the document tree.
15
+ * @remarks
16
+ * "Extraneous information" includes, for example, data for nodes that were both created and removed within the same
17
+ * transaction, or changes whose effects cancel out to nothing. Minimizing reduces the size of an edit without altering
18
+ * its observable effect.
19
+ *
20
+ * This is the eventual home of the minimization algorithm, colocated with {@link ModularChangeFamily} so it can use its
21
+ * internals. It is currently a no-op that returns the change unchanged; a real implementation will be provided in a
22
+ * future change.
23
+ *
24
+ * @param change - The change to minimize.
25
+ * @param fieldKinds - The field kinds to delegate to when computing the change's delta.
26
+ */
27
+ export function minimizeModularChangeset(
28
+ change: ModularChangeset,
29
+ fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
30
+ ): ModularChangeset {
31
+ // TODO: Actually minimize the change. For now this is a no-op that returns the change unchanged.
32
+ return change;
33
+ }
@@ -35,6 +35,7 @@ import {
35
35
  import { newChangeAtomIdBTree, type ChangeAtomIdBTree } from "../changeAtomIdBTree.js";
36
36
  import {
37
37
  type FieldBatchCodec,
38
+ FieldBatchDecodingContext,
38
39
  type TreeChunk,
39
40
  chunkFieldSingle,
40
41
  defaultChunkPolicy,
@@ -328,7 +329,6 @@ export function encodeDetachedNodes(
328
329
  trees: fieldsCodec.encode(treesToEncode, {
329
330
  encodeType: chunkCompressionStrategy,
330
331
  schema: context.schema,
331
- originatorId: context.originatorId,
332
332
  idCompressor: context.idCompressor,
333
333
  isSummary: context.isSummary,
334
334
  }),
@@ -350,14 +350,18 @@ export function decodeDetachedNodes(
350
350
  return undefined;
351
351
  }
352
352
 
353
- const chunks = fieldsCodec.decode(encoded.trees, {
354
- encodeType: chunkCompressionStrategy,
355
- originatorId: context.originatorId,
356
- idCompressor: context.idCompressor,
357
- isSummary: context.isSummary,
358
- healUnresolvableIdentifiersOnDecode: context.healUnresolvableIdentifiersOnDecode,
359
- sharedObjectId: context.sharedObjectId,
360
- });
353
+ const chunks = fieldsCodec.decode(
354
+ encoded.trees,
355
+ context.isSummary
356
+ ? FieldBatchDecodingContext.forSummary({
357
+ idCompressor: context.idCompressor,
358
+ healing: context.healing,
359
+ })
360
+ : FieldBatchDecodingContext.forOp({
361
+ idCompressor: context.idCompressor,
362
+ originatorId: context.originatorId,
363
+ }),
364
+ );
361
365
  const getChunk = (index: number): TreeChunk => {
362
366
  assert(index < chunks.length, 0x898 /* out of bounds index for build chunk */);
363
367
  return chunkFieldSingle(chunks[index] ?? oob(), {