@fluidframework/tree 2.0.0-dev-rc.3.0.0.254674 → 2.0.0-dev-rc.4.0.0.261659

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 (824) hide show
  1. package/.eslintrc.cjs +29 -0
  2. package/.vscode/settings.json +3 -0
  3. package/CHANGELOG.md +74 -0
  4. package/README.md +17 -5
  5. package/api-report/tree.api.md +86 -86
  6. package/beta.d.ts +11 -0
  7. package/dist/beta.d.ts +23 -20
  8. package/dist/core/change-family/changeFamily.d.ts +2 -1
  9. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  10. package/dist/core/change-family/changeFamily.js.map +1 -1
  11. package/dist/core/index.d.ts +2 -2
  12. package/dist/core/index.d.ts.map +1 -1
  13. package/dist/core/index.js +3 -1
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/core/rebase/changeRebaser.d.ts +2 -1
  16. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  17. package/dist/core/rebase/changeRebaser.js.map +1 -1
  18. package/dist/core/rebase/index.d.ts +1 -1
  19. package/dist/core/rebase/index.d.ts.map +1 -1
  20. package/dist/core/rebase/index.js +2 -1
  21. package/dist/core/rebase/index.js.map +1 -1
  22. package/dist/core/rebase/revisionTagCodec.d.ts.map +1 -1
  23. package/dist/core/rebase/revisionTagCodec.js.map +1 -1
  24. package/dist/core/rebase/types.d.ts +1 -0
  25. package/dist/core/rebase/types.d.ts.map +1 -1
  26. package/dist/core/rebase/types.js +12 -1
  27. package/dist/core/rebase/types.js.map +1 -1
  28. package/dist/core/rebase/utils.d.ts +2 -2
  29. package/dist/core/rebase/utils.d.ts.map +1 -1
  30. package/dist/core/rebase/utils.js +16 -9
  31. package/dist/core/rebase/utils.js.map +1 -1
  32. package/dist/core/rebase/verifyChangeRebaser.js +1 -1
  33. package/dist/core/rebase/verifyChangeRebaser.js.map +1 -1
  34. package/dist/core/schema-stored/index.d.ts +1 -1
  35. package/dist/core/schema-stored/index.d.ts.map +1 -1
  36. package/dist/core/schema-stored/index.js +2 -1
  37. package/dist/core/schema-stored/index.js.map +1 -1
  38. package/dist/core/schema-stored/schema.d.ts +7 -7
  39. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  40. package/dist/core/schema-stored/schema.js +14 -7
  41. package/dist/core/schema-stored/schema.js.map +1 -1
  42. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  43. package/dist/core/tree/detachedFieldIndexCodec.js +1 -0
  44. package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
  45. package/dist/core/tree/treeTextFormat.d.ts +2 -0
  46. package/dist/core/tree/treeTextFormat.d.ts.map +1 -1
  47. package/dist/core/tree/treeTextFormat.js.map +1 -1
  48. package/dist/core/tree/visitDelta.js +3 -3
  49. package/dist/core/tree/visitDelta.js.map +1 -1
  50. package/dist/domains/json/jsonCursor.d.ts.map +1 -1
  51. package/dist/domains/json/jsonCursor.js +2 -1
  52. package/dist/domains/json/jsonCursor.js.map +1 -1
  53. package/dist/feature-libraries/changeAtomIdCodec.js +2 -2
  54. package/dist/feature-libraries/changeAtomIdCodec.js.map +1 -1
  55. package/dist/feature-libraries/chunked-forest/codec/codecs.js +1 -1
  56. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  57. package/dist/feature-libraries/contextuallyTyped.d.ts.map +1 -1
  58. package/dist/feature-libraries/contextuallyTyped.js +1 -1
  59. package/dist/feature-libraries/contextuallyTyped.js.map +1 -1
  60. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +1 -1
  61. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  62. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +2 -2
  63. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  64. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  65. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +18 -7
  66. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  67. package/dist/feature-libraries/default-schema/noChangeCodecs.js +1 -1
  68. package/dist/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
  69. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +27 -0
  70. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -0
  71. package/dist/feature-libraries/default-schema/schemaChecker.js +120 -0
  72. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -0
  73. package/dist/feature-libraries/deltaUtils.d.ts +2 -2
  74. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  75. package/dist/feature-libraries/deltaUtils.js +2 -2
  76. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  77. package/dist/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  78. package/dist/feature-libraries/editableTreeBinder.js +1 -1
  79. package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
  80. package/dist/feature-libraries/flex-tree/context.d.ts +4 -5
  81. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  82. package/dist/feature-libraries/flex-tree/context.js +5 -13
  83. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  84. package/dist/feature-libraries/flex-tree/index.d.ts +0 -1
  85. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  86. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  87. package/dist/feature-libraries/flex-tree/lazyField.js +2 -2
  88. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  89. package/dist/feature-libraries/flex-tree/lazyNode.js +3 -3
  90. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  91. package/dist/feature-libraries/flex-tree/utilities.d.ts +2 -2
  92. package/dist/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
  93. package/dist/feature-libraries/flex-tree/utilities.js +5 -5
  94. package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
  95. package/dist/feature-libraries/index.d.ts +3 -3
  96. package/dist/feature-libraries/index.d.ts.map +1 -1
  97. package/dist/feature-libraries/index.js +3 -3
  98. package/dist/feature-libraries/index.js.map +1 -1
  99. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  100. package/dist/feature-libraries/mitigatedChangeFamily.js +1 -0
  101. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  102. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -10
  103. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  104. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +4 -3
  105. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  106. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  107. package/dist/feature-libraries/modular-schema/genericFieldKind.js +16 -9
  108. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  109. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js +2 -2
  110. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  111. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  112. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  113. package/dist/feature-libraries/modular-schema/index.js +2 -1
  114. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  115. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +25 -10
  116. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  117. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +14 -8
  118. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  119. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +149 -121
  120. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  121. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +0 -8
  122. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  123. package/dist/feature-libraries/modular-schema/modularChangeFormat.js +0 -10
  124. package/dist/feature-libraries/modular-schema/modularChangeFormat.js.map +1 -1
  125. package/dist/feature-libraries/node-key/nodeKeyManager.d.ts +8 -0
  126. package/dist/feature-libraries/node-key/nodeKeyManager.d.ts.map +1 -1
  127. package/dist/feature-libraries/node-key/nodeKeyManager.js +24 -2
  128. package/dist/feature-libraries/node-key/nodeKeyManager.js.map +1 -1
  129. package/dist/feature-libraries/optional-field/optionalField.d.ts +2 -2
  130. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  131. package/dist/feature-libraries/optional-field/optionalField.js +85 -63
  132. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  133. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +5 -13
  134. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  135. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +12 -19
  136. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
  137. package/dist/feature-libraries/optional-field/{optionalFieldChangeFormatV0.d.ts → optionalFieldChangeFormatV2.d.ts} +14 -6
  138. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -0
  139. package/dist/feature-libraries/optional-field/{optionalFieldChangeFormatV0.js → optionalFieldChangeFormatV2.js} +20 -13
  140. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -0
  141. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.d.ts.map +1 -1
  142. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.js +97 -26
  143. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.js.map +1 -1
  144. package/dist/feature-libraries/optional-field/{optionalFieldCodecV0.d.ts → optionalFieldCodecV2.d.ts} +2 -2
  145. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -0
  146. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +87 -0
  147. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -0
  148. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +2 -2
  149. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  150. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +2 -2
  151. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  152. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  153. package/dist/feature-libraries/schema-index/codec.js +1 -1
  154. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  155. package/dist/feature-libraries/sequence-field/compose.d.ts +3 -4
  156. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  157. package/dist/feature-libraries/sequence-field/compose.js +99 -68
  158. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  159. package/dist/feature-libraries/sequence-field/invert.d.ts +2 -2
  160. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  161. package/dist/feature-libraries/sequence-field/invert.js +20 -20
  162. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  163. package/dist/feature-libraries/sequence-field/markQueue.d.ts +1 -3
  164. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  165. package/dist/feature-libraries/sequence-field/markQueue.js +2 -3
  166. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  167. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +13 -2
  168. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  169. package/dist/feature-libraries/sequence-field/moveEffectTable.js +18 -9
  170. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  171. package/dist/feature-libraries/sequence-field/rebase.d.ts +1 -2
  172. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  173. package/dist/feature-libraries/sequence-field/rebase.js +55 -62
  174. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  175. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +2 -2
  176. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -1
  177. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +2 -2
  178. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -1
  179. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts +8 -0
  180. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -0
  181. package/dist/feature-libraries/sequence-field/replaceRevisions.js +63 -0
  182. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -0
  183. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +2 -0
  184. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
  185. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +2 -0
  186. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
  187. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js +24 -29
  188. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  189. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -2
  190. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  191. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +7 -7
  192. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  193. package/dist/feature-libraries/sequence-field/utils.d.ts +16 -9
  194. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  195. package/dist/feature-libraries/sequence-field/utils.js +50 -32
  196. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  197. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +1 -1
  198. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  199. package/dist/feature-libraries/valueUtilities.d.ts +1 -2
  200. package/dist/feature-libraries/valueUtilities.d.ts.map +1 -1
  201. package/dist/feature-libraries/valueUtilities.js +7 -25
  202. package/dist/feature-libraries/valueUtilities.js.map +1 -1
  203. package/dist/index.d.ts +4 -4
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +2 -5
  206. package/dist/index.js.map +1 -1
  207. package/dist/packageVersion.d.ts +1 -1
  208. package/dist/packageVersion.js +1 -1
  209. package/dist/packageVersion.js.map +1 -1
  210. package/dist/public.d.ts +22 -1
  211. package/dist/shared-tree/defaultCommitEnricher.d.ts +91 -0
  212. package/dist/shared-tree/defaultCommitEnricher.d.ts.map +1 -0
  213. package/dist/shared-tree/defaultCommitEnricher.js +121 -0
  214. package/dist/shared-tree/defaultCommitEnricher.js.map +1 -0
  215. package/dist/shared-tree/index.d.ts +1 -1
  216. package/dist/shared-tree/index.d.ts.map +1 -1
  217. package/dist/shared-tree/index.js +2 -1
  218. package/dist/shared-tree/index.js.map +1 -1
  219. package/dist/shared-tree/schematizingTreeView.js +1 -1
  220. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  221. package/dist/shared-tree/sharedTree.d.ts +9 -3
  222. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  223. package/dist/shared-tree/sharedTree.js +18 -7
  224. package/dist/shared-tree/sharedTree.js.map +1 -1
  225. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  226. package/dist/shared-tree/sharedTreeChangeCodecs.js +7 -2
  227. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  228. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts +24 -0
  229. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -0
  230. package/dist/shared-tree/sharedTreeChangeEnricher.js +65 -0
  231. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -0
  232. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +12 -3
  233. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  234. package/dist/shared-tree/sharedTreeChangeFamily.js +83 -7
  235. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  236. package/dist/shared-tree/treeApi.d.ts +261 -8
  237. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  238. package/dist/shared-tree/treeApi.js +52 -18
  239. package/dist/shared-tree/treeApi.js.map +1 -1
  240. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  241. package/dist/shared-tree/treeCheckout.js +9 -11
  242. package/dist/shared-tree/treeCheckout.js.map +1 -1
  243. package/dist/shared-tree/treeView.d.ts +1 -1
  244. package/dist/shared-tree/treeView.js.map +1 -1
  245. package/dist/shared-tree-core/branch.d.ts +22 -2
  246. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  247. package/dist/shared-tree-core/branch.js +18 -12
  248. package/dist/shared-tree-core/branch.js.map +1 -1
  249. package/dist/shared-tree-core/commitEnricher.d.ts +35 -0
  250. package/dist/shared-tree-core/commitEnricher.d.ts.map +1 -0
  251. package/dist/shared-tree-core/commitEnricher.js +7 -0
  252. package/dist/shared-tree-core/commitEnricher.js.map +1 -0
  253. package/dist/shared-tree-core/editManager.d.ts +8 -5
  254. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  255. package/dist/shared-tree-core/editManager.js +11 -3
  256. package/dist/shared-tree-core/editManager.js.map +1 -1
  257. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  258. package/dist/shared-tree-core/editManagerCodecs.js +28 -10
  259. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  260. package/dist/shared-tree-core/editManagerFormat.d.ts +2 -3
  261. package/dist/shared-tree-core/editManagerFormat.d.ts.map +1 -1
  262. package/dist/shared-tree-core/editManagerFormat.js +2 -3
  263. package/dist/shared-tree-core/editManagerFormat.js.map +1 -1
  264. package/dist/shared-tree-core/index.d.ts +1 -0
  265. package/dist/shared-tree-core/index.d.ts.map +1 -1
  266. package/dist/shared-tree-core/index.js.map +1 -1
  267. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  268. package/dist/shared-tree-core/messageCodecs.js +16 -7
  269. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  270. package/dist/shared-tree-core/sharedTreeCore.d.ts +12 -5
  271. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  272. package/dist/shared-tree-core/sharedTreeCore.js +50 -15
  273. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  274. package/dist/simple-tree/arrayNode.d.ts +12 -4
  275. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  276. package/dist/simple-tree/arrayNode.js +227 -233
  277. package/dist/simple-tree/arrayNode.js.map +1 -1
  278. package/dist/simple-tree/index.d.ts +2 -2
  279. package/dist/simple-tree/index.d.ts.map +1 -1
  280. package/dist/simple-tree/index.js +1 -3
  281. package/dist/simple-tree/index.js.map +1 -1
  282. package/dist/simple-tree/leafNodeSchema.js +1 -1
  283. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  284. package/dist/simple-tree/mapNode.d.ts +3 -11
  285. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  286. package/dist/simple-tree/mapNode.js +84 -133
  287. package/dist/simple-tree/mapNode.js.map +1 -1
  288. package/dist/{feature-libraries/flex-tree → simple-tree}/nodeKeys.d.ts +9 -11
  289. package/dist/simple-tree/nodeKeys.d.ts.map +1 -0
  290. package/dist/simple-tree/nodeKeys.js +7 -0
  291. package/dist/simple-tree/nodeKeys.js.map +1 -0
  292. package/dist/simple-tree/objectNode.d.ts +16 -5
  293. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  294. package/dist/simple-tree/objectNode.js +105 -76
  295. package/dist/simple-tree/objectNode.js.map +1 -1
  296. package/dist/simple-tree/proxies.d.ts +1 -1
  297. package/dist/simple-tree/proxies.d.ts.map +1 -1
  298. package/dist/simple-tree/proxies.js +7 -6
  299. package/dist/simple-tree/proxies.js.map +1 -1
  300. package/dist/simple-tree/proxyBinding.d.ts +2 -2
  301. package/dist/simple-tree/proxyBinding.d.ts.map +1 -1
  302. package/dist/simple-tree/proxyBinding.js +3 -3
  303. package/dist/simple-tree/proxyBinding.js.map +1 -1
  304. package/dist/simple-tree/schemaCaching.js +2 -2
  305. package/dist/simple-tree/schemaCaching.js.map +1 -1
  306. package/dist/simple-tree/schemaFactory.d.ts +74 -40
  307. package/dist/simple-tree/schemaFactory.d.ts.map +1 -1
  308. package/dist/simple-tree/schemaFactory.js +87 -83
  309. package/dist/simple-tree/schemaFactory.js.map +1 -1
  310. package/dist/simple-tree/schemaFactoryRecursive.d.ts +25 -82
  311. package/dist/simple-tree/schemaFactoryRecursive.d.ts.map +1 -1
  312. package/dist/simple-tree/schemaFactoryRecursive.js +3 -117
  313. package/dist/simple-tree/schemaFactoryRecursive.js.map +1 -1
  314. package/dist/simple-tree/schemaTypes.d.ts +13 -17
  315. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  316. package/dist/simple-tree/schemaTypes.js +10 -3
  317. package/dist/simple-tree/schemaTypes.js.map +1 -1
  318. package/dist/simple-tree/testRecursiveDomain.js +2 -2
  319. package/dist/simple-tree/testRecursiveDomain.js.map +1 -1
  320. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  321. package/dist/simple-tree/toMapTree.js +7 -6
  322. package/dist/simple-tree/toMapTree.js.map +1 -1
  323. package/dist/simple-tree/treeApi.d.ts +6 -3
  324. package/dist/simple-tree/treeApi.d.ts.map +1 -1
  325. package/dist/simple-tree/treeApi.js +6 -3
  326. package/dist/simple-tree/treeApi.js.map +1 -1
  327. package/dist/simple-tree/types.d.ts +63 -0
  328. package/dist/simple-tree/types.d.ts.map +1 -1
  329. package/dist/simple-tree/types.js +109 -1
  330. package/dist/simple-tree/types.js.map +1 -1
  331. package/dist/simple-tree/typesUnsafe.d.ts +13 -13
  332. package/dist/simple-tree/typesUnsafe.js.map +1 -1
  333. package/dist/treeFactory.d.ts +1 -1
  334. package/dist/treeFactory.d.ts.map +1 -1
  335. package/dist/treeFactory.js +12 -14
  336. package/dist/treeFactory.js.map +1 -1
  337. package/dist/util/brand.d.ts +7 -86
  338. package/dist/util/brand.d.ts.map +1 -1
  339. package/dist/util/brand.js +2 -53
  340. package/dist/util/brand.js.map +1 -1
  341. package/dist/util/index.d.ts +1 -1
  342. package/dist/util/index.d.ts.map +1 -1
  343. package/dist/util/index.js +2 -5
  344. package/dist/util/index.js.map +1 -1
  345. package/dist/util/opaque.d.ts +5 -5
  346. package/dist/util/opaque.d.ts.map +1 -1
  347. package/dist/util/opaque.js.map +1 -1
  348. package/dist/util/utils.d.ts +2 -2
  349. package/dist/util/utils.js +2 -2
  350. package/dist/util/utils.js.map +1 -1
  351. package/docs/.attachments/merge-semantics.drawio +835 -0
  352. package/docs/.attachments/ms-set-color-red-and-blue.png +0 -0
  353. package/docs/.attachments/ms-set-color-red-then-blue.png +0 -0
  354. package/docs/.attachments/ms-set-color-red.png +0 -0
  355. package/docs/SharedTree Philosophy.md +319 -0
  356. package/docs/main/merge-semantics.md +529 -0
  357. package/docs/main/sequence-field/move-composition.md +46 -0
  358. package/internal.d.ts +11 -0
  359. package/lib/beta.d.ts +23 -20
  360. package/lib/core/change-family/changeFamily.d.ts +2 -1
  361. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  362. package/lib/core/change-family/changeFamily.js.map +1 -1
  363. package/lib/core/index.d.ts +2 -2
  364. package/lib/core/index.d.ts.map +1 -1
  365. package/lib/core/index.js +2 -2
  366. package/lib/core/index.js.map +1 -1
  367. package/lib/core/rebase/changeRebaser.d.ts +2 -1
  368. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  369. package/lib/core/rebase/changeRebaser.js.map +1 -1
  370. package/lib/core/rebase/index.d.ts +1 -1
  371. package/lib/core/rebase/index.d.ts.map +1 -1
  372. package/lib/core/rebase/index.js +1 -1
  373. package/lib/core/rebase/index.js.map +1 -1
  374. package/lib/core/rebase/revisionTagCodec.d.ts.map +1 -1
  375. package/lib/core/rebase/revisionTagCodec.js.map +1 -1
  376. package/lib/core/rebase/types.d.ts +1 -0
  377. package/lib/core/rebase/types.d.ts.map +1 -1
  378. package/lib/core/rebase/types.js +10 -0
  379. package/lib/core/rebase/types.js.map +1 -1
  380. package/lib/core/rebase/utils.d.ts +2 -2
  381. package/lib/core/rebase/utils.d.ts.map +1 -1
  382. package/lib/core/rebase/utils.js +17 -10
  383. package/lib/core/rebase/utils.js.map +1 -1
  384. package/lib/core/rebase/verifyChangeRebaser.js +1 -1
  385. package/lib/core/rebase/verifyChangeRebaser.js.map +1 -1
  386. package/lib/core/schema-stored/index.d.ts +1 -1
  387. package/lib/core/schema-stored/index.d.ts.map +1 -1
  388. package/lib/core/schema-stored/index.js +1 -1
  389. package/lib/core/schema-stored/index.js.map +1 -1
  390. package/lib/core/schema-stored/schema.d.ts +7 -7
  391. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  392. package/lib/core/schema-stored/schema.js +13 -7
  393. package/lib/core/schema-stored/schema.js.map +1 -1
  394. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  395. package/lib/core/tree/detachedFieldIndexCodec.js +1 -0
  396. package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
  397. package/lib/core/tree/treeTextFormat.d.ts +2 -0
  398. package/lib/core/tree/treeTextFormat.d.ts.map +1 -1
  399. package/lib/core/tree/treeTextFormat.js.map +1 -1
  400. package/lib/core/tree/visitDelta.js +3 -3
  401. package/lib/core/tree/visitDelta.js.map +1 -1
  402. package/lib/domains/json/jsonCursor.d.ts.map +1 -1
  403. package/lib/domains/json/jsonCursor.js +2 -1
  404. package/lib/domains/json/jsonCursor.js.map +1 -1
  405. package/lib/feature-libraries/changeAtomIdCodec.js +2 -2
  406. package/lib/feature-libraries/changeAtomIdCodec.js.map +1 -1
  407. package/lib/feature-libraries/chunked-forest/codec/codecs.js +1 -1
  408. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  409. package/lib/feature-libraries/contextuallyTyped.d.ts.map +1 -1
  410. package/lib/feature-libraries/contextuallyTyped.js +1 -1
  411. package/lib/feature-libraries/contextuallyTyped.js.map +1 -1
  412. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +1 -1
  413. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  414. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +2 -2
  415. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  416. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  417. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +18 -7
  418. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  419. package/lib/feature-libraries/default-schema/noChangeCodecs.js +1 -1
  420. package/lib/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
  421. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +27 -0
  422. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -0
  423. package/lib/feature-libraries/default-schema/schemaChecker.js +114 -0
  424. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -0
  425. package/lib/feature-libraries/deltaUtils.d.ts +2 -2
  426. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  427. package/lib/feature-libraries/deltaUtils.js +3 -3
  428. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  429. package/lib/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  430. package/lib/feature-libraries/editableTreeBinder.js +1 -1
  431. package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
  432. package/lib/feature-libraries/flex-tree/context.d.ts +4 -5
  433. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  434. package/lib/feature-libraries/flex-tree/context.js +5 -13
  435. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  436. package/lib/feature-libraries/flex-tree/index.d.ts +0 -1
  437. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  438. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  439. package/lib/feature-libraries/flex-tree/lazyField.js +2 -2
  440. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  441. package/lib/feature-libraries/flex-tree/lazyNode.js +3 -3
  442. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  443. package/lib/feature-libraries/flex-tree/utilities.d.ts +2 -2
  444. package/lib/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
  445. package/lib/feature-libraries/flex-tree/utilities.js +5 -5
  446. package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
  447. package/lib/feature-libraries/index.d.ts +3 -3
  448. package/lib/feature-libraries/index.d.ts.map +1 -1
  449. package/lib/feature-libraries/index.js +2 -2
  450. package/lib/feature-libraries/index.js.map +1 -1
  451. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  452. package/lib/feature-libraries/mitigatedChangeFamily.js +1 -0
  453. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  454. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -10
  455. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  456. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +4 -3
  457. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  458. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  459. package/lib/feature-libraries/modular-schema/genericFieldKind.js +17 -10
  460. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  461. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js +2 -2
  462. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  463. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  464. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  465. package/lib/feature-libraries/modular-schema/index.js +1 -1
  466. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  467. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +25 -10
  468. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  469. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +14 -8
  470. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  471. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +151 -123
  472. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  473. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +0 -8
  474. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  475. package/lib/feature-libraries/modular-schema/modularChangeFormat.js +0 -10
  476. package/lib/feature-libraries/modular-schema/modularChangeFormat.js.map +1 -1
  477. package/lib/feature-libraries/node-key/nodeKeyManager.d.ts +8 -0
  478. package/lib/feature-libraries/node-key/nodeKeyManager.d.ts.map +1 -1
  479. package/lib/feature-libraries/node-key/nodeKeyManager.js +24 -3
  480. package/lib/feature-libraries/node-key/nodeKeyManager.js.map +1 -1
  481. package/lib/feature-libraries/optional-field/optionalField.d.ts +2 -2
  482. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  483. package/lib/feature-libraries/optional-field/optionalField.js +86 -64
  484. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  485. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +5 -13
  486. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  487. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +11 -18
  488. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
  489. package/lib/feature-libraries/optional-field/{optionalFieldChangeFormatV0.d.ts → optionalFieldChangeFormatV2.d.ts} +14 -6
  490. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -0
  491. package/lib/feature-libraries/optional-field/{optionalFieldChangeFormatV0.js → optionalFieldChangeFormatV2.js} +19 -12
  492. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -0
  493. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.d.ts.map +1 -1
  494. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.js +98 -27
  495. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.js.map +1 -1
  496. package/lib/feature-libraries/optional-field/{optionalFieldCodecV0.d.ts → optionalFieldCodecV2.d.ts} +2 -2
  497. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -0
  498. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +83 -0
  499. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -0
  500. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +2 -2
  501. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  502. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +2 -2
  503. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  504. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  505. package/lib/feature-libraries/schema-index/codec.js +3 -3
  506. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  507. package/lib/feature-libraries/sequence-field/compose.d.ts +3 -4
  508. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  509. package/lib/feature-libraries/sequence-field/compose.js +99 -68
  510. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  511. package/lib/feature-libraries/sequence-field/invert.d.ts +2 -2
  512. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  513. package/lib/feature-libraries/sequence-field/invert.js +21 -21
  514. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  515. package/lib/feature-libraries/sequence-field/markQueue.d.ts +1 -3
  516. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  517. package/lib/feature-libraries/sequence-field/markQueue.js +2 -3
  518. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  519. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +13 -2
  520. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  521. package/lib/feature-libraries/sequence-field/moveEffectTable.js +18 -9
  522. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  523. package/lib/feature-libraries/sequence-field/rebase.d.ts +1 -2
  524. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  525. package/lib/feature-libraries/sequence-field/rebase.js +56 -63
  526. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  527. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +2 -2
  528. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -1
  529. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +2 -2
  530. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -1
  531. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts +8 -0
  532. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -0
  533. package/lib/feature-libraries/sequence-field/replaceRevisions.js +59 -0
  534. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -0
  535. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +2 -0
  536. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
  537. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +2 -0
  538. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
  539. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js +25 -30
  540. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  541. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -2
  542. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  543. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +9 -9
  544. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  545. package/lib/feature-libraries/sequence-field/utils.d.ts +16 -9
  546. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  547. package/lib/feature-libraries/sequence-field/utils.js +47 -30
  548. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  549. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +1 -1
  550. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  551. package/lib/feature-libraries/valueUtilities.d.ts +1 -2
  552. package/lib/feature-libraries/valueUtilities.d.ts.map +1 -1
  553. package/lib/feature-libraries/valueUtilities.js +1 -18
  554. package/lib/feature-libraries/valueUtilities.js.map +1 -1
  555. package/lib/index.d.ts +4 -4
  556. package/lib/index.d.ts.map +1 -1
  557. package/lib/index.js +2 -4
  558. package/lib/index.js.map +1 -1
  559. package/lib/packageVersion.d.ts +1 -1
  560. package/lib/packageVersion.js +1 -1
  561. package/lib/packageVersion.js.map +1 -1
  562. package/lib/public.d.ts +22 -1
  563. package/lib/shared-tree/defaultCommitEnricher.d.ts +91 -0
  564. package/lib/shared-tree/defaultCommitEnricher.d.ts.map +1 -0
  565. package/lib/shared-tree/defaultCommitEnricher.js +117 -0
  566. package/lib/shared-tree/defaultCommitEnricher.js.map +1 -0
  567. package/lib/shared-tree/index.d.ts +1 -1
  568. package/lib/shared-tree/index.d.ts.map +1 -1
  569. package/lib/shared-tree/index.js +1 -1
  570. package/lib/shared-tree/index.js.map +1 -1
  571. package/lib/shared-tree/schematizingTreeView.js +1 -1
  572. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  573. package/lib/shared-tree/sharedTree.d.ts +9 -3
  574. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  575. package/lib/shared-tree/sharedTree.js +19 -8
  576. package/lib/shared-tree/sharedTree.js.map +1 -1
  577. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  578. package/lib/shared-tree/sharedTreeChangeCodecs.js +7 -2
  579. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  580. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts +24 -0
  581. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -0
  582. package/lib/shared-tree/sharedTreeChangeEnricher.js +61 -0
  583. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -0
  584. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +12 -3
  585. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  586. package/lib/shared-tree/sharedTreeChangeFamily.js +82 -7
  587. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  588. package/lib/shared-tree/treeApi.d.ts +261 -8
  589. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  590. package/lib/shared-tree/treeApi.js +52 -19
  591. package/lib/shared-tree/treeApi.js.map +1 -1
  592. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  593. package/lib/shared-tree/treeCheckout.js +10 -12
  594. package/lib/shared-tree/treeCheckout.js.map +1 -1
  595. package/lib/shared-tree/treeView.d.ts +1 -1
  596. package/lib/shared-tree/treeView.js.map +1 -1
  597. package/lib/shared-tree-core/branch.d.ts +22 -2
  598. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  599. package/lib/shared-tree-core/branch.js +18 -12
  600. package/lib/shared-tree-core/branch.js.map +1 -1
  601. package/lib/shared-tree-core/commitEnricher.d.ts +35 -0
  602. package/lib/shared-tree-core/commitEnricher.d.ts.map +1 -0
  603. package/lib/shared-tree-core/commitEnricher.js +6 -0
  604. package/lib/shared-tree-core/commitEnricher.js.map +1 -0
  605. package/lib/shared-tree-core/editManager.d.ts +8 -5
  606. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  607. package/lib/shared-tree-core/editManager.js +13 -5
  608. package/lib/shared-tree-core/editManager.js.map +1 -1
  609. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  610. package/lib/shared-tree-core/editManagerCodecs.js +28 -10
  611. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  612. package/lib/shared-tree-core/editManagerFormat.d.ts +2 -3
  613. package/lib/shared-tree-core/editManagerFormat.d.ts.map +1 -1
  614. package/lib/shared-tree-core/editManagerFormat.js +1 -2
  615. package/lib/shared-tree-core/editManagerFormat.js.map +1 -1
  616. package/lib/shared-tree-core/index.d.ts +1 -0
  617. package/lib/shared-tree-core/index.d.ts.map +1 -1
  618. package/lib/shared-tree-core/index.js.map +1 -1
  619. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  620. package/lib/shared-tree-core/messageCodecs.js +16 -7
  621. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  622. package/lib/shared-tree-core/sharedTreeCore.d.ts +12 -5
  623. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  624. package/lib/shared-tree-core/sharedTreeCore.js +50 -15
  625. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  626. package/lib/simple-tree/arrayNode.d.ts +12 -4
  627. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  628. package/lib/simple-tree/arrayNode.js +227 -234
  629. package/lib/simple-tree/arrayNode.js.map +1 -1
  630. package/lib/simple-tree/index.d.ts +2 -2
  631. package/lib/simple-tree/index.d.ts.map +1 -1
  632. package/lib/simple-tree/index.js +0 -1
  633. package/lib/simple-tree/index.js.map +1 -1
  634. package/lib/simple-tree/leafNodeSchema.js +1 -1
  635. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  636. package/lib/simple-tree/mapNode.d.ts +3 -11
  637. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  638. package/lib/simple-tree/mapNode.js +84 -132
  639. package/lib/simple-tree/mapNode.js.map +1 -1
  640. package/lib/{feature-libraries/flex-tree → simple-tree}/nodeKeys.d.ts +9 -11
  641. package/lib/simple-tree/nodeKeys.d.ts.map +1 -0
  642. package/lib/simple-tree/nodeKeys.js +6 -0
  643. package/lib/simple-tree/nodeKeys.js.map +1 -0
  644. package/lib/simple-tree/objectNode.d.ts +16 -5
  645. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  646. package/lib/simple-tree/objectNode.js +104 -76
  647. package/lib/simple-tree/objectNode.js.map +1 -1
  648. package/lib/simple-tree/proxies.d.ts +1 -1
  649. package/lib/simple-tree/proxies.d.ts.map +1 -1
  650. package/lib/simple-tree/proxies.js +4 -3
  651. package/lib/simple-tree/proxies.js.map +1 -1
  652. package/lib/simple-tree/proxyBinding.d.ts +2 -2
  653. package/lib/simple-tree/proxyBinding.d.ts.map +1 -1
  654. package/lib/simple-tree/proxyBinding.js +3 -3
  655. package/lib/simple-tree/proxyBinding.js.map +1 -1
  656. package/lib/simple-tree/schemaCaching.js +2 -2
  657. package/lib/simple-tree/schemaCaching.js.map +1 -1
  658. package/lib/simple-tree/schemaFactory.d.ts +74 -40
  659. package/lib/simple-tree/schemaFactory.d.ts.map +1 -1
  660. package/lib/simple-tree/schemaFactory.js +88 -84
  661. package/lib/simple-tree/schemaFactory.js.map +1 -1
  662. package/lib/simple-tree/schemaFactoryRecursive.d.ts +25 -82
  663. package/lib/simple-tree/schemaFactoryRecursive.d.ts.map +1 -1
  664. package/lib/simple-tree/schemaFactoryRecursive.js +3 -116
  665. package/lib/simple-tree/schemaFactoryRecursive.js.map +1 -1
  666. package/lib/simple-tree/schemaTypes.d.ts +13 -17
  667. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  668. package/lib/simple-tree/schemaTypes.js +14 -3
  669. package/lib/simple-tree/schemaTypes.js.map +1 -1
  670. package/lib/simple-tree/testRecursiveDomain.js +2 -2
  671. package/lib/simple-tree/testRecursiveDomain.js.map +1 -1
  672. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  673. package/lib/simple-tree/toMapTree.js +7 -6
  674. package/lib/simple-tree/toMapTree.js.map +1 -1
  675. package/lib/simple-tree/treeApi.d.ts +6 -3
  676. package/lib/simple-tree/treeApi.d.ts.map +1 -1
  677. package/lib/simple-tree/treeApi.js +7 -4
  678. package/lib/simple-tree/treeApi.js.map +1 -1
  679. package/lib/simple-tree/types.d.ts +63 -0
  680. package/lib/simple-tree/types.d.ts.map +1 -1
  681. package/lib/simple-tree/types.js +106 -0
  682. package/lib/simple-tree/types.js.map +1 -1
  683. package/lib/simple-tree/typesUnsafe.d.ts +13 -13
  684. package/lib/simple-tree/typesUnsafe.js.map +1 -1
  685. package/lib/treeFactory.d.ts +1 -1
  686. package/lib/treeFactory.d.ts.map +1 -1
  687. package/lib/treeFactory.js +12 -14
  688. package/lib/treeFactory.js.map +1 -1
  689. package/lib/util/brand.d.ts +7 -86
  690. package/lib/util/brand.d.ts.map +1 -1
  691. package/lib/util/brand.js +1 -49
  692. package/lib/util/brand.js.map +1 -1
  693. package/lib/util/index.d.ts +1 -1
  694. package/lib/util/index.d.ts.map +1 -1
  695. package/lib/util/index.js +1 -1
  696. package/lib/util/index.js.map +1 -1
  697. package/lib/util/opaque.d.ts +5 -5
  698. package/lib/util/opaque.d.ts.map +1 -1
  699. package/lib/util/opaque.js.map +1 -1
  700. package/lib/util/utils.d.ts +2 -2
  701. package/lib/util/utils.js +2 -2
  702. package/lib/util/utils.js.map +1 -1
  703. package/package.json +38 -28
  704. package/src/core/change-family/changeFamily.ts +2 -1
  705. package/src/core/forest/README.md +1 -1
  706. package/src/core/index.ts +2 -1
  707. package/src/core/rebase/changeRebaser.ts +7 -1
  708. package/src/core/rebase/index.ts +1 -0
  709. package/src/core/rebase/revisionTagCodec.ts +1 -0
  710. package/src/core/rebase/types.ts +17 -0
  711. package/src/core/rebase/utils.ts +20 -12
  712. package/src/core/rebase/verifyChangeRebaser.ts +1 -1
  713. package/src/core/schema-stored/index.ts +1 -1
  714. package/src/core/schema-stored/schema.ts +21 -18
  715. package/src/core/tree/detachedFieldIndexCodec.ts +1 -0
  716. package/src/core/tree/treeTextFormat.ts +2 -0
  717. package/src/core/tree/visitDelta.ts +3 -3
  718. package/src/domains/json/jsonCursor.ts +2 -5
  719. package/src/feature-libraries/changeAtomIdCodec.ts +2 -2
  720. package/src/feature-libraries/chunked-forest/codec/codecs.ts +1 -1
  721. package/src/feature-libraries/contextuallyTyped.ts +1 -1
  722. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +2 -4
  723. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +18 -7
  724. package/src/feature-libraries/default-schema/noChangeCodecs.ts +1 -1
  725. package/src/feature-libraries/default-schema/schemaChecker.ts +140 -0
  726. package/src/feature-libraries/deltaUtils.ts +3 -12
  727. package/src/feature-libraries/editableTreeBinder.ts +1 -1
  728. package/src/feature-libraries/flex-tree/context.ts +6 -13
  729. package/src/feature-libraries/flex-tree/index.ts +0 -2
  730. package/src/feature-libraries/flex-tree/lazyField.ts +2 -2
  731. package/src/feature-libraries/flex-tree/lazyNode.ts +3 -3
  732. package/src/feature-libraries/flex-tree/utilities.ts +5 -6
  733. package/src/feature-libraries/index.ts +2 -2
  734. package/src/feature-libraries/mitigatedChangeFamily.ts +8 -1
  735. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +18 -15
  736. package/src/feature-libraries/modular-schema/genericFieldKind.ts +33 -26
  737. package/src/feature-libraries/modular-schema/genericFieldKindCodecs.ts +2 -2
  738. package/src/feature-libraries/modular-schema/index.ts +1 -0
  739. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +35 -13
  740. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +213 -213
  741. package/src/feature-libraries/modular-schema/modularChangeFormat.ts +0 -20
  742. package/src/feature-libraries/node-key/nodeKeyManager.ts +37 -2
  743. package/src/feature-libraries/optional-field/optionalField.ts +112 -94
  744. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV1.ts +14 -22
  745. package/src/feature-libraries/optional-field/{optionalFieldChangeFormatV0.ts → optionalFieldChangeFormatV2.ts} +22 -14
  746. package/src/feature-libraries/optional-field/optionalFieldCodecV1.ts +113 -44
  747. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +135 -0
  748. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +2 -2
  749. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +5 -2
  750. package/src/feature-libraries/schema-index/codec.ts +3 -3
  751. package/src/feature-libraries/sequence-field/compose.ts +198 -146
  752. package/src/feature-libraries/sequence-field/invert.ts +21 -48
  753. package/src/feature-libraries/sequence-field/markQueue.ts +1 -5
  754. package/src/feature-libraries/sequence-field/moveEffectTable.ts +38 -15
  755. package/src/feature-libraries/sequence-field/rebase.ts +46 -150
  756. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +3 -3
  757. package/src/feature-libraries/sequence-field/replaceRevisions.ts +87 -0
  758. package/src/feature-libraries/sequence-field/sequenceFieldChangeRebaser.ts +2 -0
  759. package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +39 -34
  760. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +8 -14
  761. package/src/feature-libraries/sequence-field/utils.ts +47 -44
  762. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +1 -1
  763. package/src/feature-libraries/valueUtilities.ts +2 -22
  764. package/src/index.ts +22 -21
  765. package/src/packageVersion.ts +1 -1
  766. package/src/shared-tree/defaultCommitEnricher.ts +176 -0
  767. package/src/shared-tree/index.ts +8 -1
  768. package/src/shared-tree/schematizingTreeView.ts +1 -1
  769. package/src/shared-tree/sharedTree.ts +29 -8
  770. package/src/shared-tree/sharedTreeChangeCodecs.ts +12 -3
  771. package/src/shared-tree/sharedTreeChangeEnricher.ts +87 -0
  772. package/src/shared-tree/sharedTreeChangeFamily.ts +124 -8
  773. package/src/shared-tree/treeApi.ts +365 -34
  774. package/src/shared-tree/treeCheckout.ts +19 -19
  775. package/src/shared-tree/treeView.ts +1 -1
  776. package/src/shared-tree-core/branch.ts +49 -12
  777. package/src/shared-tree-core/commitEnricher.ts +39 -0
  778. package/src/shared-tree-core/editManager.ts +32 -15
  779. package/src/shared-tree-core/editManagerCodecs.ts +30 -16
  780. package/src/shared-tree-core/editManagerFormat.ts +2 -4
  781. package/src/shared-tree-core/index.ts +2 -0
  782. package/src/shared-tree-core/messageCodecs.ts +28 -7
  783. package/src/shared-tree-core/sharedTreeCore.ts +82 -18
  784. package/src/simple-tree/arrayNode.ts +334 -330
  785. package/src/simple-tree/index.ts +2 -2
  786. package/src/simple-tree/leafNodeSchema.ts +1 -1
  787. package/src/simple-tree/mapNode.ts +113 -169
  788. package/src/{feature-libraries/flex-tree → simple-tree}/nodeKeys.ts +9 -20
  789. package/src/simple-tree/objectNode.ts +176 -126
  790. package/src/simple-tree/proxies.ts +4 -4
  791. package/src/simple-tree/proxyBinding.ts +9 -4
  792. package/src/simple-tree/schemaCaching.ts +2 -2
  793. package/src/simple-tree/schemaFactory.ts +195 -121
  794. package/src/simple-tree/schemaFactoryRecursive.ts +33 -189
  795. package/src/simple-tree/schemaTypes.ts +34 -8
  796. package/src/simple-tree/testRecursiveDomain.ts +2 -2
  797. package/src/simple-tree/toMapTree.ts +7 -6
  798. package/src/simple-tree/treeApi.ts +15 -12
  799. package/src/simple-tree/types.ts +157 -1
  800. package/src/simple-tree/typesUnsafe.ts +13 -13
  801. package/src/treeFactory.ts +12 -15
  802. package/src/util/brand.ts +8 -107
  803. package/src/util/index.ts +1 -11
  804. package/src/util/opaque.ts +5 -5
  805. package/src/util/utils.ts +2 -2
  806. package/dist/alpha.d.ts +0 -90
  807. package/dist/feature-libraries/flex-tree/nodeKeys.d.ts.map +0 -1
  808. package/dist/feature-libraries/flex-tree/nodeKeys.js +0 -24
  809. package/dist/feature-libraries/flex-tree/nodeKeys.js.map +0 -1
  810. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV0.d.ts.map +0 -1
  811. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV0.js.map +0 -1
  812. package/dist/feature-libraries/optional-field/optionalFieldCodecV0.d.ts.map +0 -1
  813. package/dist/feature-libraries/optional-field/optionalFieldCodecV0.js +0 -158
  814. package/dist/feature-libraries/optional-field/optionalFieldCodecV0.js.map +0 -1
  815. package/lib/alpha.d.ts +0 -90
  816. package/lib/feature-libraries/flex-tree/nodeKeys.d.ts.map +0 -1
  817. package/lib/feature-libraries/flex-tree/nodeKeys.js +0 -20
  818. package/lib/feature-libraries/flex-tree/nodeKeys.js.map +0 -1
  819. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV0.d.ts.map +0 -1
  820. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV0.js.map +0 -1
  821. package/lib/feature-libraries/optional-field/optionalFieldCodecV0.d.ts.map +0 -1
  822. package/lib/feature-libraries/optional-field/optionalFieldCodecV0.js +0 -154
  823. package/lib/feature-libraries/optional-field/optionalFieldCodecV0.js.map +0 -1
  824. package/src/feature-libraries/optional-field/optionalFieldCodecV0.ts +0 -204
package/.eslintrc.cjs CHANGED
@@ -39,4 +39,33 @@ module.exports = {
39
39
  },
40
40
  },
41
41
  ],
42
+ settings: {
43
+ "import/extensions": [".ts", ".tsx", ".d.ts", ".js", ".jsx"],
44
+ "import/parsers": {
45
+ "@typescript-eslint/parser": [".ts", ".tsx", ".d.ts"],
46
+ },
47
+ "import/resolver": {
48
+ typescript: {
49
+ extensions: [".ts", ".tsx", ".d.ts", ".js", ".jsx"],
50
+ conditionNames: [
51
+ "allow-ff-test-exports",
52
+
53
+ // Default condition names below, see https://www.npmjs.com/package/eslint-import-resolver-typescript#conditionnames
54
+ "types",
55
+ "import",
56
+
57
+ // APF: https://angular.io/guide/angular-package-format
58
+ "esm2020",
59
+ "es2020",
60
+ "es2015",
61
+
62
+ "require",
63
+ "node",
64
+ "node-addons",
65
+ "browser",
66
+ "default",
67
+ ],
68
+ },
69
+ },
70
+ },
42
71
  };
@@ -12,5 +12,8 @@
12
12
  ],
13
13
  "mochaExplorer.configFile": ".mocharc.cjs",
14
14
  "mochaExplorer.timeout": 999999,
15
+ // This extension appears to invoke mocha programmatically, meaning that the enablement of this option in the common
16
+ // mocha test config isn't sufficient; it also needs to be enabled here.
17
+ "mochaExplorer.nodeArgv": ["--conditions", "allow-ff-test-exports"],
15
18
  "cSpell.words": ["deprioritized", "endregion", "insertable", "reentrantly", "unhydrated"],
16
19
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,79 @@
1
1
  # @fluidframework/tree
2
2
 
3
+ ## 2.0.0-rc.3.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - Packages now use package.json "exports" and require modern module resolution [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
8
+
9
+ Fluid Framework packages have been updated to use the [package.json "exports"
10
+ field](https://nodejs.org/docs/latest-v18.x/api/packages.html#exports) to define explicit entry points for both
11
+ TypeScript types and implementation code.
12
+
13
+ This means that using Fluid Framework packages require the following TypeScript settings in tsconfig.json:
14
+
15
+ - `"moduleResolution": "Node16"` with `"module": "Node16"`
16
+ - `"moduleResolution": "Bundler"` with `"module": "ESNext"`
17
+
18
+ We recommend using Node16/Node16 unless absolutely necessary. That will produce transpiled JavaScript that is suitable
19
+ for use with modern versions of Node.js _and_ Bundlers.
20
+ [See the TypeScript documentation](https://www.typescriptlang.org/tsconfig#moduleResolution) for more information
21
+ regarding the module and moduleResolution options.
22
+
23
+ **Node10 moduleResolution is not supported; it does not support Fluid Framework's API structuring pattern that is used
24
+ to distinguish stable APIs from those that are in development.**
25
+
26
+ ### Minor Changes
27
+
28
+ - Better events [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
29
+
30
+ We have updated the Events to make it easier to create granular event listeners for single nodes and better support the
31
+ undo/redo feature. SharedTree nodes now expose `nodeChanged` and `treeChanged` events that fire in response to changes
32
+ in the node, and to changes in the subtree rooted at the node, respectively.
33
+
34
+ This change was originally made in [#20286](https://github.com/microsoft/FluidFramework/pull/20286) ([ac1e773960](https://github.com/microsoft/FluidFramework/commit/ac1e7739607551abb0dae7fa74dda56aec94b609)).
35
+
36
+ [Read more about SharedTree Events at fluidframework.com](https://fluidframework.com/docs/data-structures/tree/#event-handling)
37
+
38
+ - Recursive schemas [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
39
+
40
+ Schemas are even more powerful now with the added support for recursive types, which allows you to define types that
41
+ reference nodes of the same type in their subtree.
42
+
43
+ Users of the beta APIs via `SchemaFactoryRecursive` can now find them on `SchemaFactory`.
44
+
45
+ [Read more about Recursive Schema at fluidframework.com](https://fluidframework.com/docs/data-structures/tree/#recursive-schema)
46
+
47
+ - Transactions [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
48
+
49
+ You can group multiple changes such that they are applied atomically, and if they fail, they fail atomically. As a
50
+ result of grouping changes in a transaction, you also get a single revertible object making it easier to undo and redo.
51
+
52
+ [Read more about Transactions at fluidframework.com](https://fluidframework.com/docs/data-structures/tree/#transactions)
53
+
54
+ - tree: Empty optional fields on object nodes now are undefined non-enumerable own properties instead of not a property at all. [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
55
+
56
+ Empty optional fields on object nodes now are now undefined non-enumerable own properties.
57
+ This improves behavior in cases where they shadow inherited members which no longer have types which differ from the runtime behavior.
58
+
59
+ - tree: Allow root editing and make TreeView parameterized over schema. [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
60
+
61
+ TreeView now is parameterized over the field schema instead of the root field type. This was needed to infer the correct input type when reassigning the root.
62
+ Code providing an explicit type to TreeView, like `TreeView<Foo>` can usually be updated by replacing that with `TreeView<typeof Foo>`.
63
+
64
+ - fluid-framework: Replace SharedObjectClass with new ISharedObjectKind type. [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
65
+
66
+ The static objects used as SharedObjectClass now explicitly implement the new ISharedObjectKind type.
67
+ SharedObjectClass has been removed as ISharedObjectKind now fills that role.
68
+ LoadableObjectCtor has been inlined as it only had one use: an external user of it can replace it with `(new (...args: any[]) => T)`.
69
+
70
+ - Undo/Redo [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
71
+
72
+ Added the ability to listen for changes and track revertible objects on your undo/redo stacks. Revertibles allow you to
73
+ undo and redo changes even if other changes have been made in remote clients.
74
+
75
+ [Read more about Undo/redo at fluidframework.com](https://fluidframework.com/docs/data-structures/tree/#undoredo-support)
76
+
3
77
  ## 2.0.0-rc.2.0.0
4
78
 
5
79
  ### Minor Changes
package/README.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # @fluidframework/tree
2
2
 
3
- For a high-level overview of the goals of this project, see the [roadmap](docs/roadmap.md).
3
+ A [tree](<https://en.wikipedia.org/wiki/Tree_(data_structure)>) data structure for the [Fluid Framework](https://fluidframework.com/).
4
+
5
+ The contents of this package are also reported as part of the [`fluid-framework` package](https://www.npmjs.com/package/fluid-framework) which provides an alternative way to consume the functionality from this package.
6
+
7
+ [SharedTree Philosophy](./docs/SharedTree%20Philosophy.md) covers the goals of the SharedTree project,
8
+ and some of the implications of those goals for developers working on this package.
4
9
 
5
10
  ## Status
6
11
 
@@ -12,7 +17,13 @@ Notable consideration that early adopters should be wary of:
12
17
  - SharedTree currently has unbounded memory growth:
13
18
  - Removed content is retained forever.
14
19
  - Accessing an `EditableField` object (from its parent, e.g., with `getField`) in a loop will leak unbounded memory.
15
- - All changes are atomized by the `visitDelta` function. This means that, when inserting/removing/moving 2 contiguous nodes, the `visitDelta` function will call the `DeltaVisitor` twice (once for each node) instead of once for both nodes. Change notification consumers that are downstream from the `DeltaVisitor` will therefore also see those changes as atomized.
20
+ - All changes are atomized by the `visitDelta` function.
21
+ This means that, when inserting/removing/moving 2 contiguous nodes, the `visitDelta` function will call the `DeltaVisitor` twice (once for each node) instead of once for both nodes.
22
+ Change notification consumers that are downstream from the `DeltaVisitor` will therefore also see those changes as atomized.
23
+ - Some documentation (such as this readme and [the roadmap](docs/roadmap.md)) are out of date.
24
+ The [API documentation](https://fluidframework.com/docs/api/v2/tree) which is derived from the documentation comments in the source code should be more up to date.
25
+
26
+ More details on the development status of various features can be found in the [roadmap](docs/roadmap.md).
16
27
 
17
28
  <!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->
18
29
 
@@ -89,11 +100,12 @@ This tree serves to get these feature into the hands of users much faster than c
89
100
 
90
101
  This package can be developed using any of the [regular workflows for working on Fluid Framework](../../../README.md) and/or its Client release group of packages, but for work only touching the tree package, there is an optional workflow that might be more ergonomic:
91
102
 
103
+ - Follow the [Setup and Building](../../../README.md#setup-and-building) instructions.
92
104
  - Open the [.vscode/Tree.code-workspace](.vscode/Tree.code-workspace) in VS Code.
93
105
  This will recommend a test runner extension, which should be installed.
94
- - Build the Client release group as normal (for example: `pnpm i && npm run build:fast` in the repository root).
95
- - After editing the tree project, run `npm run build` in its directory.
96
- - Run tests using the "Testing" side panel in VS Code, or using the inline `Run | Debug` buttons which should show up above tests in the source:
106
+ - Build the the tree package as normal (for run example: `pnpm i && pnpm run build` in the `tree` directory).
107
+ - After editing the tree project, run `npm run build` (still in the `tree`) directory.
108
+ - Run and debug tests using the "Testing" side panel in VS Code, or using the inline `Run | Debug` buttons which should show up above tests in the source:
97
109
  both of these are provided by the mocha testing extension thats recommended by the workspace.
98
110
  Note that this does not build the tests, so always be sure to build first.
99
111
 
@@ -4,12 +4,9 @@
4
4
 
5
5
  ```ts
6
6
 
7
+ import { ErasedType } from '@fluidframework/core-interfaces';
7
8
  import { FluidObject } from '@fluidframework/core-interfaces';
8
9
  import { IChannel } from '@fluidframework/datastore-definitions';
9
- import { IChannelAttributes } from '@fluidframework/datastore-definitions';
10
- import { IChannelFactory } from '@fluidframework/datastore-definitions';
11
- import { IChannelServices } from '@fluidframework/datastore-definitions';
12
- import { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';
13
10
  import { IFluidHandle } from '@fluidframework/core-interfaces';
14
11
  import { IFluidLoadable } from '@fluidframework/core-interfaces';
15
12
  import { ISharedObject } from '@fluidframework/shared-object-base';
@@ -162,10 +159,10 @@ export type AssignableFieldKinds = typeof FieldKinds.optional | typeof FieldKind
162
159
  export type Assume<TInput, TAssumeToBe> = [TInput] extends [TAssumeToBe] ? TInput : TAssumeToBe;
163
160
 
164
161
  // @internal
165
- export type Brand<ValueType, Name extends string | ErasedType<string>> = ValueType & BrandedType<ValueType, Name extends Erased<infer TName> ? TName : Assume<Name, string>>;
162
+ export type Brand<ValueType, Name> = ValueType & BrandedType<ValueType, Name>;
166
163
 
167
164
  // @internal
168
- export function brand<T>(value: T extends BrandedType<infer ValueType, string> ? ValueType : never): T;
165
+ export function brand<T>(value: T extends BrandedType<infer ValueType, unknown> ? ValueType : never): T;
169
166
 
170
167
  // @internal
171
168
  export type BrandedKey<TKey, TContent> = TKey & Invariant<TContent>;
@@ -186,7 +183,7 @@ export interface BrandedMapSubset<K extends BrandedKey<unknown, any>> {
186
183
  }
187
184
 
188
185
  // @internal @sealed
189
- export abstract class BrandedType<out ValueType, Name extends string> {
186
+ export abstract class BrandedType<out ValueType, Name> {
190
187
  static [Symbol.hasInstance](value: never): value is never;
191
188
  protected abstract brand(dummy: never): Name;
192
189
  // (undocumented)
@@ -427,16 +424,7 @@ export function enumFromStrings<TScope extends string, const Members extends str
427
424
  })>;
428
425
 
429
426
  // @internal
430
- export type Erased<Name extends string> = ErasedType<Name>;
431
-
432
- // @internal
433
- export interface ErasedTreeNodeSchemaDataFormat extends Erased<"TreeNodeSchemaDataFormat"> {
434
- }
435
-
436
- // @internal @sealed
437
- export abstract class ErasedType<out Name extends string> {
438
- static [Symbol.hasInstance](value: never): value is never;
439
- protected abstract brand(dummy: never): Name;
427
+ export interface ErasedTreeNodeSchemaDataFormat extends ErasedType<"TreeNodeSchemaDataFormat"> {
440
428
  }
441
429
 
442
430
  // @public
@@ -445,10 +433,10 @@ export type Events<E> = {
445
433
  };
446
434
 
447
435
  // @internal
448
- export type ExtractFromOpaque<TOpaque extends BrandedType<any, string>> = TOpaque extends BrandedType<infer ValueType, infer Name> ? isAny<ValueType> extends true ? unknown : Brand<ValueType, Name> : never;
436
+ export type ExtractFromOpaque<TOpaque extends BrandedType<any, unknown>> = TOpaque extends BrandedType<infer ValueType, infer Name> ? isAny<ValueType> extends true ? unknown : Brand<ValueType, Name> : never;
449
437
 
450
438
  // @internal
451
- export function extractFromOpaque<TOpaque extends BrandedType<any, string>>(value: TOpaque): ExtractFromOpaque<TOpaque>;
439
+ export function extractFromOpaque<TOpaque extends BrandedType<any, unknown>>(value: TOpaque): ExtractFromOpaque<TOpaque>;
452
440
 
453
441
  // @public
454
442
  export type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result ? Result : Item;
@@ -518,10 +506,6 @@ export interface FieldProps {
518
506
 
519
507
  // @public @sealed
520
508
  export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes> {
521
- constructor(
522
- kind: Kind,
523
- allowedTypes: Types,
524
- props?: FieldProps | undefined);
525
509
  readonly allowedTypes: Types;
526
510
  get allowedTypeSet(): ReadonlySet<TreeNodeSchema>;
527
511
  readonly kind: Kind;
@@ -529,7 +513,7 @@ export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types exten
529
513
  protected _typeCheck?: MakeNominal;
530
514
  }
531
515
 
532
- // @beta
516
+ // @public
533
517
  export interface FieldSchemaUnsafe<out Kind extends FieldKind, out Types extends Unenforced<ImplicitAllowedTypes>> extends FieldSchema<Kind, any> {
534
518
  readonly allowedTypes: Types;
535
519
  readonly allowedTypeSet: ReadonlySet<TreeNodeSchema>;
@@ -648,7 +632,7 @@ export class FlexObjectNodeSchema<const out Name extends string = string, const
648
632
  export interface FlexTreeContext extends ISubscribable<ForestEvents> {
649
633
  readonly forest: IForestSubscription;
650
634
  // (undocumented)
651
- readonly nodeKeys: NodeKeys;
635
+ readonly nodeKeyManager: NodeKeyManager;
652
636
  get root(): FlexTreeField;
653
637
  readonly schema: FlexTreeSchema;
654
638
  }
@@ -1008,7 +992,7 @@ export type InsertableObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord
1008
992
  readonly [Property in keyof T]: InsertableTreeFieldFromImplicitField<T[Property]>;
1009
993
  };
1010
994
 
1011
- // @beta
995
+ // @public
1012
996
  export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>> = {
1013
997
  readonly [Property in keyof T]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
1014
998
  };
@@ -1016,13 +1000,13 @@ export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<Restrict
1016
1000
  // @public
1017
1001
  export type InsertableTreeFieldFromImplicitField<TSchema extends ImplicitFieldSchema = FieldSchema> = TSchema extends FieldSchema<infer Kind, infer Types> ? ApplyKind<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind> : TSchema extends ImplicitAllowedTypes ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema> : unknown;
1018
1002
 
1019
- // @beta
1003
+ // @public
1020
1004
  export type InsertableTreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> = TSchema extends FieldSchemaUnsafe<infer Kind, infer Types> ? ApplyKind<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind> : InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>;
1021
1005
 
1022
1006
  // @public
1023
1007
  export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? InsertableTypedNode<TSchema> : TSchema extends AllowedTypes ? InsertableTypedNode<FlexListToUnion<TSchema>> : never;
1024
1008
 
1025
- // @beta
1009
+ // @public
1026
1010
  export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends AllowedTypes ? InsertableTypedNodeUnsafe<FlexListToUnion<TSchema>> : InsertableTypedNodeUnsafe<TSchema>;
1027
1011
 
1028
1012
  // @public
@@ -1030,11 +1014,15 @@ export type InsertableTypedNode<T extends TreeNodeSchema> = (T extends {
1030
1014
  implicitlyConstructable: true;
1031
1015
  } ? NodeBuilderData<T> : never) | Unhydrated<NodeFromSchema<T>>;
1032
1016
 
1033
- // @beta
1017
+ // @public
1034
1018
  export type InsertableTypedNodeUnsafe<T extends Unenforced<TreeNodeSchema>> = Unhydrated<NodeFromSchemaUnsafe<T>> | (T extends {
1035
1019
  implicitlyConstructable: true;
1036
1020
  } ? NodeBuilderDataUnsafe<T> : never);
1037
1021
 
1022
+ // @public
1023
+ export interface InternalTreeNode extends ErasedType<"@fluidframework/tree.InternalTreeNode"> {
1024
+ }
1025
+
1038
1026
  // @internal
1039
1027
  export interface Invariant<in out T> extends Contravariant<T>, Covariant<T> {
1040
1028
  }
@@ -1282,7 +1270,7 @@ export interface Named<TName> {
1282
1270
  }
1283
1271
 
1284
1272
  // @internal
1285
- export type NameFromBranded<T extends BrandedType<unknown, string>> = T extends BrandedType<unknown, infer Name> ? Name : never;
1273
+ export type NameFromBranded<T extends BrandedType<unknown, unknown>> = T extends BrandedType<unknown, infer Name> ? Name : never;
1286
1274
 
1287
1275
  // @internal
1288
1276
  export type NestedMap<Key1, Key2, Value> = Map<Key1, Map<Key2, Value>>;
@@ -1293,7 +1281,7 @@ export type NewFieldContent = ITreeCursorSynchronous | readonly ITreeCursorSynch
1293
1281
  // @public
1294
1282
  export type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
1295
1283
 
1296
- // @beta
1284
+ // @public
1297
1285
  export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchema<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
1298
1286
 
1299
1287
  // @internal
@@ -1311,12 +1299,20 @@ export interface NodeExistsConstraint {
1311
1299
  // @public
1312
1300
  export type NodeFromSchema<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, infer TNode> ? TNode : never;
1313
1301
 
1314
- // @beta
1302
+ // @public
1315
1303
  export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchema<string, NodeKind, infer TNode> ? TNode : never;
1316
1304
 
1317
1305
  // @internal
1318
1306
  export type NodeIndex = number;
1319
1307
 
1308
+ // @public
1309
+ export interface NodeInDocumentConstraint {
1310
+ // (undocumented)
1311
+ node: TreeNode;
1312
+ // (undocumented)
1313
+ type: "nodeInDocument";
1314
+ }
1315
+
1320
1316
  // @internal
1321
1317
  export const nodeKeyFieldKey = "__n_id__";
1322
1318
 
@@ -1325,11 +1321,11 @@ export interface NodeKeyFieldKind extends FlexFieldKind<"NodeKey", Multiplicity.
1325
1321
  }
1326
1322
 
1327
1323
  // @internal
1328
- export interface NodeKeys {
1329
- generate(): LocalNodeKey;
1330
- localize(key: StableNodeKey): LocalNodeKey;
1331
- readonly map: ReadonlyMap<LocalNodeKey, FlexTreeObjectNode>;
1332
- stabilize(key: LocalNodeKey): StableNodeKey;
1324
+ export interface NodeKeyManager {
1325
+ generateLocalNodeKey(): LocalNodeKey;
1326
+ localizeNodeKey(key: StableNodeKey): LocalNodeKey;
1327
+ stabilizeNodeKey(key: LocalNodeKey): StableNodeKey;
1328
+ tryLocalizeNodeKey(key: string): LocalNodeKey | undefined;
1333
1329
  }
1334
1330
 
1335
1331
  // @public
@@ -1365,7 +1361,7 @@ export type ObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, I
1365
1361
  -readonly [Property in keyof T]: TreeFieldFromImplicitField<T[Property]>;
1366
1362
  };
1367
1363
 
1368
- // @beta
1364
+ // @public
1369
1365
  export type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>> = {
1370
1366
  -readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
1371
1367
  };
@@ -1383,7 +1379,7 @@ export class ObjectNodeStoredSchema extends TreeNodeStoredSchema {
1383
1379
  export function oneFromSet<T>(set: ReadonlySet<T> | undefined): T | undefined;
1384
1380
 
1385
1381
  // @internal
1386
- export type Opaque<T extends Brand<any, string>> = T extends BrandedType<infer ValueType, infer Name> ? BrandedType<ValueType, Name> : never;
1382
+ export type Opaque<T extends Brand<any, unknown>> = T extends BrandedType<infer ValueType, infer Name> ? BrandedType<ValueType, Name> : never;
1387
1383
 
1388
1384
  // @internal (undocumented)
1389
1385
  export interface Optional extends FlexFieldKind<"Optional", Multiplicity.Optional> {
@@ -1513,6 +1509,9 @@ export enum RevertibleStatus {
1513
1509
  // @internal
1514
1510
  export type RevisionTag = SessionSpaceCompressedId | "root";
1515
1511
 
1512
+ // @public
1513
+ export const rollback: unique symbol;
1514
+
1516
1515
  // @internal
1517
1516
  export interface RootField {
1518
1517
  // (undocumented)
@@ -1528,6 +1527,23 @@ export const rootFieldKey: FieldKey;
1528
1527
  // @internal
1529
1528
  export function runSynchronous(view: ITreeCheckout, transaction: (view: ITreeCheckout) => TransactionResult | void): TransactionResult;
1530
1529
 
1530
+ // @public
1531
+ export interface RunTransaction {
1532
+ <TNode extends TreeNode, TResult>(node: TNode, transaction: (node: TNode) => TResult): TResult;
1533
+ <TView extends TreeView<ImplicitFieldSchema>, TResult>(tree: TView, transaction: (root: TView["root"]) => TResult): TResult;
1534
+ <TNode extends TreeNode, TResult>(node: TNode, transaction: (node: TNode) => TResult | typeof rollback): TResult | typeof rollback;
1535
+ <TView extends TreeView<ImplicitFieldSchema>, TResult>(tree: TView, transaction: (root: TView["root"]) => TResult | typeof rollback): TResult | typeof rollback;
1536
+ <TNode extends TreeNode>(node: TNode, transaction: (node: TNode) => void): void;
1537
+ <TView extends TreeView<ImplicitFieldSchema>>(tree: TView, transaction: (root: TView["root"]) => void): void;
1538
+ <TNode extends TreeNode, TResult>(node: TNode, transaction: (node: TNode) => TResult, preconditions?: TransactionConstraint[]): TResult;
1539
+ <TView extends TreeView<ImplicitFieldSchema>, TResult>(tree: TView, transaction: (root: TView["root"]) => TResult, preconditions?: TransactionConstraint[]): TResult;
1540
+ <TNode extends TreeNode, TResult>(node: TNode, transaction: (node: TNode) => TResult | typeof rollback, preconditions?: TransactionConstraint[]): TResult | typeof rollback;
1541
+ <TView extends TreeView<ImplicitFieldSchema>, TResult>(tree: TView, transaction: (root: TView["root"]) => TResult | typeof rollback, preconditions?: TransactionConstraint[]): TResult | typeof rollback;
1542
+ <TNode extends TreeNode>(node: TNode, transaction: (node: TNode) => void, preconditions?: TransactionConstraint[]): void;
1543
+ <TView extends TreeView<ImplicitFieldSchema>>(tree: TView, transaction: (root: TView["root"]) => void, preconditions?: TransactionConstraint[]): void;
1544
+ readonly rollback: typeof rollback;
1545
+ }
1546
+
1531
1547
  // @internal
1532
1548
  export class SchemaBuilderBase<TScope extends string, TDefaultKind extends FlexFieldKind, TName extends number | string = string> {
1533
1549
  constructor(defaultKind: TDefaultKind, options: SchemaBuilderOptions<TScope>);
@@ -1581,40 +1597,33 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
1581
1597
  constructor(scope: TScope);
1582
1598
  array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
1583
1599
  array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
1600
+ arrayRecursive<const Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>>, {
1601
+ [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
1602
+ }, false, T>;
1584
1603
  readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
1585
- // @deprecated
1586
- fixRecursiveReference<T extends AllowedTypes>(...types: T): void;
1587
1604
  readonly handle: TreeNodeSchema<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<FluidObject & IFluidLoadable>, IFluidHandle<FluidObject & IFluidLoadable>>;
1588
1605
  get identifier(): FieldSchema<FieldKind.Identifier>;
1589
1606
  map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>>, Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T>]>, true, T>;
1590
1607
  map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>>, Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T>]>, true, T>;
1591
- namedArray_internal<Name extends TName | string, const T extends ImplicitAllowedTypes, const ImplicitlyConstructable extends boolean>(name: Name, allowedTypes: T, customizable: boolean, implicitlyConstructable: ImplicitlyConstructable): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, string>>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, ImplicitlyConstructable, T>;
1592
- namedMap_internal<Name extends TName | string, const T extends ImplicitAllowedTypes, const ImplicitlyConstructable extends boolean>(name: Name, allowedTypes: T, customizable: boolean, implicitlyConstructable: ImplicitlyConstructable): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>>, Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T>]>, ImplicitlyConstructable, T>;
1608
+ mapRecursive<Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>>, {
1609
+ [Symbol.iterator](): Iterator<[
1610
+ string,
1611
+ InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
1612
+ ]>;
1613
+ }, false, T>;
1593
1614
  readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
1594
1615
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
1595
1616
  object<const Name extends TName, const T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
1617
+ objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecordUnsafe<T>, false, T>;
1596
1618
  optional<const T extends ImplicitAllowedTypes>(t: T, props?: FieldProps): FieldSchema<FieldKind.Optional, T>;
1619
+ optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: FieldProps): FieldSchemaUnsafe<FieldKind.Optional, T>;
1597
1620
  required<const T extends ImplicitAllowedTypes>(t: T, props?: FieldProps): FieldSchema<FieldKind.Required, T>;
1621
+ requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: FieldProps): FieldSchemaUnsafe<FieldKind.Required, T>;
1598
1622
  // (undocumented)
1599
1623
  readonly scope: TScope;
1600
1624
  readonly string: TreeNodeSchema<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string>;
1601
1625
  }
1602
1626
 
1603
- // @beta @sealed
1604
- export class SchemaFactoryRecursive<TScope extends string, TName extends number | string = string> extends SchemaFactory<TScope, TName> {
1605
- arrayRecursive<const Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>>, {
1606
- [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
1607
- }, false, T>;
1608
- mapRecursive<Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>>, {
1609
- [Symbol.iterator](): Iterator<[
1610
- string,
1611
- InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
1612
- ]>;
1613
- }, false, T>;
1614
- objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecordUnsafe<T>, false, T>;
1615
- optionalRecursive<const T extends Unenforced<readonly (() => TreeNodeSchema)[]>>(t: T): FieldSchemaUnsafe<FieldKind.Optional, T>;
1616
- }
1617
-
1618
1627
  // @public
1619
1628
  export interface SchemaIncompatible {
1620
1629
  readonly canUpgrade: boolean;
@@ -1693,19 +1702,6 @@ export interface SharedTreeContentSnapshot {
1693
1702
  readonly tree: JsonableTree[];
1694
1703
  }
1695
1704
 
1696
- // @internal
1697
- export class SharedTreeFactory implements IChannelFactory<ISharedTree> {
1698
- constructor(options?: SharedTreeOptions);
1699
- // (undocumented)
1700
- readonly attributes: IChannelAttributes;
1701
- // (undocumented)
1702
- create(runtime: IFluidDataStoreRuntime, id: string): ISharedTree;
1703
- // (undocumented)
1704
- load(runtime: IFluidDataStoreRuntime, id: string, services: IChannelServices, channelAttributes: Readonly<IChannelAttributes>): Promise<ISharedTree>;
1705
- // (undocumented)
1706
- readonly type: string;
1707
- }
1708
-
1709
1705
  // @internal
1710
1706
  export interface SharedTreeFormatOptions {
1711
1707
  formatVersion: SharedTreeFormatVersion[keyof SharedTreeFormatVersion];
@@ -1715,6 +1711,7 @@ export interface SharedTreeFormatOptions {
1715
1711
  // @internal
1716
1712
  export const SharedTreeFormatVersion: {
1717
1713
  readonly v1: 1;
1714
+ readonly v2: 2;
1718
1715
  };
1719
1716
 
1720
1717
  // @internal
@@ -1774,6 +1771,9 @@ readonly recursive: FieldSchemaUnsafe<FieldKind.Optional, readonly [() => TreeNo
1774
1771
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
1775
1772
  }>;
1776
1773
 
1774
+ // @public
1775
+ export type TransactionConstraint = NodeInDocumentConstraint;
1776
+
1777
1777
  // @internal
1778
1778
  export enum TransactionResult {
1779
1779
  Abort = 0,
@@ -1794,8 +1794,7 @@ export interface TreeAdapter {
1794
1794
  // @public
1795
1795
  export interface TreeApi extends TreeNodeApi {
1796
1796
  contains(node: TreeNode, other: TreeNode): boolean;
1797
- runTransaction<TNode extends TreeNode>(node: TNode, transaction: (node: TNode) => void | "rollback"): void;
1798
- runTransaction<TView extends TreeView<ImplicitFieldSchema>>(tree: TView, transaction: (root: TView["root"]) => void | "rollback"): void;
1797
+ readonly runTransaction: RunTransaction;
1799
1798
  }
1800
1799
 
1801
1800
  // @public
@@ -1809,9 +1808,9 @@ export const TreeArrayNode: {
1809
1808
 
1810
1809
  // @public
1811
1810
  export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom> extends ReadonlyArray<T>, TreeNode {
1812
- insertAt(index: number, ...value: (TNew | IterableTreeArrayContent<TNew>)[]): void;
1813
- insertAtEnd(...value: (TNew | IterableTreeArrayContent<TNew>)[]): void;
1814
- insertAtStart(...value: (TNew | IterableTreeArrayContent<TNew>)[]): void;
1811
+ insertAt(index: number, ...value: readonly (TNew | IterableTreeArrayContent<TNew>)[]): void;
1812
+ insertAtEnd(...value: readonly (TNew | IterableTreeArrayContent<TNew>)[]): void;
1813
+ insertAtStart(...value: readonly (TNew | IterableTreeArrayContent<TNew>)[]): void;
1815
1814
  moveRangeToEnd(sourceStart: number, sourceEnd: number): void;
1816
1815
  moveRangeToEnd(sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
1817
1816
  moveRangeToIndex(index: number, sourceStart: number, sourceEnd: number): void;
@@ -1828,7 +1827,7 @@ export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom> extends Readonl
1828
1827
  removeRange(start?: number, end?: number): void;
1829
1828
  }
1830
1829
 
1831
- // @beta
1830
+ // @public
1832
1831
  export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAllowedTypes>> extends TreeArrayNodeBase<TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>, InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>, TreeArrayNode> {
1833
1832
  }
1834
1833
 
@@ -1867,7 +1866,7 @@ export interface TreeDataContext {
1867
1866
  // @public
1868
1867
  export type TreeFieldFromImplicitField<TSchema extends ImplicitFieldSchema = FieldSchema> = TSchema extends FieldSchema<infer Kind, infer Types> ? ApplyKind<TreeNodeFromImplicitAllowedTypes<Types>, Kind> : TSchema extends ImplicitAllowedTypes ? TreeNodeFromImplicitAllowedTypes<TSchema> : unknown;
1869
1868
 
1870
- // @beta
1869
+ // @public
1871
1870
  export type TreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> = TSchema extends FieldSchemaUnsafe<infer Kind, infer Types> ? ApplyKind<TreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind> : TSchema extends ImplicitAllowedTypes ? TreeNodeFromImplicitAllowedTypesUnsafe<TSchema> : unknown;
1872
1871
 
1873
1872
  // @internal
@@ -1894,7 +1893,7 @@ export interface TreeMapNode<T extends ImplicitAllowedTypes = ImplicitAllowedTyp
1894
1893
  set(key: string, value: InsertableTreeNodeFromImplicitAllowedTypes<T> | undefined): void;
1895
1894
  }
1896
1895
 
1897
- // @beta
1896
+ // @public
1898
1897
  export interface TreeMapNodeUnsafe<T extends Unenforced<ImplicitAllowedTypes>> extends ReadonlyMap<string, TreeNodeFromImplicitAllowedTypesUnsafe<T>>, TreeNode {
1899
1898
  delete(key: string): void;
1900
1899
  set(key: string, value: InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T> | undefined): void;
@@ -1910,6 +1909,7 @@ export const enum TreeNavigationResult {
1910
1909
  // @public
1911
1910
  export abstract class TreeNode implements WithType {
1912
1911
  abstract get [type](): string;
1912
+ protected constructor();
1913
1913
  }
1914
1914
 
1915
1915
  // @public
@@ -1919,14 +1919,14 @@ export interface TreeNodeApi {
1919
1919
  on<K extends keyof TreeChangeEvents>(node: TreeNode, eventName: K, listener: TreeChangeEvents[K]): () => void;
1920
1920
  parent(node: TreeNode): TreeNode | undefined;
1921
1921
  schema<T extends TreeNode | TreeLeafValue>(node: T): TreeNodeSchema<string, NodeKind, unknown, T>;
1922
- shortId(node: TreeNode): number | undefined;
1922
+ shortId(node: TreeNode): number | string | undefined;
1923
1923
  readonly status: (node: TreeNode) => TreeStatus;
1924
1924
  }
1925
1925
 
1926
1926
  // @public
1927
1927
  export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
1928
1928
 
1929
- // @beta
1929
+ // @public
1930
1930
  export type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends ImplicitAllowedTypes ? TreeNodeFromImplicitAllowedTypes<TSchema> : TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
1931
1931
 
1932
1932
  // @public
@@ -1952,7 +1952,7 @@ export abstract class TreeNodeSchemaBase<const out Name extends string = string,
1952
1952
  // @public
1953
1953
  export interface TreeNodeSchemaClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode = unknown, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
1954
1954
  // @sealed
1955
- new (data: TInsertable): Unhydrated<TNode>;
1955
+ new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
1956
1956
  }
1957
1957
 
1958
1958
  // @public
@@ -1985,7 +1985,7 @@ export abstract class TreeNodeStoredSchema {
1985
1985
  // @public
1986
1986
  export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName>;
1987
1987
 
1988
- // @beta
1988
+ // @public
1989
1989
  export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName>;
1990
1990
 
1991
1991
  // @internal
@@ -2068,7 +2068,7 @@ export type UnbrandedName<TName> = [
2068
2068
  TName extends TreeNodeSchemaIdentifier<infer S> ? S : string
2069
2069
  ][_InlineTrick];
2070
2070
 
2071
- // @beta
2071
+ // @public
2072
2072
  export type Unenforced<_DesiredExtendsConstraint> = unknown;
2073
2073
 
2074
2074
  // @public
@@ -2084,7 +2084,7 @@ export interface UpPath<TParent = UpPathDefault> {
2084
2084
  // @internal
2085
2085
  export type UpPathDefault = UpPath;
2086
2086
 
2087
- // @beta
2087
+ // @public
2088
2088
  export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"]>, {
2089
2089
  [NodeKind.Object]: T["info"] extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
2090
2090
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
@@ -2104,7 +2104,7 @@ export interface ValueFieldEditBuilder {
2104
2104
  }
2105
2105
 
2106
2106
  // @internal
2107
- export type ValueFromBranded<T extends BrandedType<unknown, string>> = T extends BrandedType<infer ValueType, string> ? ValueType : never;
2107
+ export type ValueFromBranded<T extends BrandedType<unknown, unknown>> = T extends BrandedType<infer ValueType, unknown> ? ValueType : never;
2108
2108
 
2109
2109
  // @internal
2110
2110
  export enum ValueSchema {
package/beta.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export * from "./lib/beta.js";