@fluidframework/tree 2.11.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/api-report/tree.alpha.api.md +88 -12
  3. package/api-report/tree.beta.api.md +23 -11
  4. package/api-report/tree.legacy.alpha.api.md +23 -11
  5. package/api-report/tree.legacy.public.api.md +23 -11
  6. package/api-report/tree.public.api.md +23 -11
  7. package/dist/alpha.d.ts +11 -0
  8. package/dist/beta.d.ts +2 -0
  9. package/dist/core/index.d.ts +2 -2
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +5 -3
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/rebase/utils.d.ts.map +1 -1
  14. package/dist/core/rebase/utils.js +2 -9
  15. package/dist/core/rebase/utils.js.map +1 -1
  16. package/dist/core/schema-stored/format.d.ts +0 -3
  17. package/dist/core/schema-stored/format.d.ts.map +1 -1
  18. package/dist/core/schema-stored/format.js.map +1 -1
  19. package/dist/core/schema-stored/schema.d.ts +12 -10
  20. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  21. package/dist/core/schema-stored/schema.js +3 -5
  22. package/dist/core/schema-stored/schema.js.map +1 -1
  23. package/dist/core/schema-view/index.d.ts +1 -1
  24. package/dist/core/schema-view/index.d.ts.map +1 -1
  25. package/dist/core/schema-view/index.js +1 -2
  26. package/dist/core/schema-view/index.js.map +1 -1
  27. package/dist/core/schema-view/view.d.ts +0 -7
  28. package/dist/core/schema-view/view.d.ts.map +1 -1
  29. package/dist/core/schema-view/view.js +1 -12
  30. package/dist/core/schema-view/view.js.map +1 -1
  31. package/dist/{feature-libraries/chunked-forest → core/tree}/chunk.d.ts +2 -1
  32. package/dist/core/tree/chunk.d.ts.map +1 -0
  33. package/dist/{feature-libraries/chunked-forest → core/tree}/chunk.js +2 -2
  34. package/dist/core/tree/chunk.js.map +1 -0
  35. package/dist/core/tree/index.d.ts +1 -0
  36. package/dist/core/tree/index.d.ts.map +1 -1
  37. package/dist/core/tree/index.js +5 -1
  38. package/dist/core/tree/index.js.map +1 -1
  39. package/dist/core/tree/treeTextFormat.d.ts +0 -5
  40. package/dist/core/tree/treeTextFormat.d.ts.map +1 -1
  41. package/dist/core/tree/treeTextFormat.js.map +1 -1
  42. package/dist/core/tree/types.d.ts +0 -5
  43. package/dist/core/tree/types.d.ts.map +1 -1
  44. package/dist/core/tree/types.js +0 -1
  45. package/dist/core/tree/types.js.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts +1 -2
  47. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  48. package/dist/feature-libraries/chunked-forest/basicChunk.js +14 -14
  49. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  50. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +1 -2
  51. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/chunkTree.js +2 -3
  53. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts +1 -2
  55. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  56. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts +1 -2
  58. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts.map +1 -1
  59. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -2
  61. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  62. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  63. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  64. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  65. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  66. package/dist/feature-libraries/chunked-forest/emptyChunk.d.ts +1 -1
  67. package/dist/feature-libraries/chunked-forest/emptyChunk.d.ts.map +1 -1
  68. package/dist/feature-libraries/chunked-forest/emptyChunk.js +2 -3
  69. package/dist/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
  70. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  71. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  72. package/dist/feature-libraries/chunked-forest/index.js +5 -5
  73. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  74. package/dist/feature-libraries/chunked-forest/sequenceChunk.d.ts +1 -1
  75. package/dist/feature-libraries/chunked-forest/sequenceChunk.d.ts.map +1 -1
  76. package/dist/feature-libraries/chunked-forest/sequenceChunk.js +2 -2
  77. package/dist/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
  78. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +1 -2
  79. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  80. package/dist/feature-libraries/chunked-forest/uniformChunk.js +13 -13
  81. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  82. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +10 -0
  83. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  84. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
  85. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  86. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  87. package/dist/feature-libraries/default-schema/defaultSchema.js +1 -0
  88. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  89. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  90. package/dist/feature-libraries/default-schema/schemaChecker.js +2 -1
  91. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  92. package/dist/feature-libraries/index.d.ts +1 -2
  93. package/dist/feature-libraries/index.d.ts.map +1 -1
  94. package/dist/feature-libraries/index.js +6 -4
  95. package/dist/feature-libraries/index.js.map +1 -1
  96. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts +8 -1
  97. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  98. package/dist/feature-libraries/indexing/anchorTreeIndex.js +31 -5
  99. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  100. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +1 -1
  101. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  102. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +8 -2
  103. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  104. package/dist/feature-libraries/modular-schema/discrepancies.d.ts +84 -24
  105. package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
  106. package/dist/feature-libraries/modular-schema/discrepancies.js +32 -33
  107. package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  108. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +12 -5
  109. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  110. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  111. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  112. package/dist/feature-libraries/modular-schema/genericFieldKind.js +2 -1
  113. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  114. package/dist/feature-libraries/modular-schema/index.d.ts +2 -2
  115. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  116. package/dist/feature-libraries/modular-schema/index.js +5 -1
  117. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  118. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts +0 -1
  119. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  120. package/dist/feature-libraries/modular-schema/isNeverTree.js +0 -1
  121. package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  122. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +1 -0
  123. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  124. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +89 -25
  125. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  126. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +12 -0
  127. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  128. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  129. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  130. package/dist/feature-libraries/optional-field/optionalField.js +24 -4
  131. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  132. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
  133. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  134. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
  135. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  136. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +12 -12
  137. package/dist/feature-libraries/sequence-field/formatV1.d.ts +99 -99
  138. package/dist/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
  139. package/dist/feature-libraries/sequence-field/formatV2.d.ts +76 -76
  140. package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  141. package/dist/feature-libraries/sequence-field/formatV3.d.ts +54 -54
  142. package/dist/feature-libraries/sequence-field/types.d.ts +0 -1
  143. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  144. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  145. package/dist/feature-libraries/sequence-field/utils.d.ts +2 -2
  146. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  147. package/dist/feature-libraries/sequence-field/utils.js +14 -5
  148. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  149. package/dist/index.d.ts +4 -5
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +2 -14
  152. package/dist/index.js.map +1 -1
  153. package/dist/legacy.d.ts +2 -0
  154. package/dist/packageVersion.d.ts +1 -1
  155. package/dist/packageVersion.js +1 -1
  156. package/dist/packageVersion.js.map +1 -1
  157. package/dist/public.d.ts +2 -0
  158. package/dist/shared-tree/index.d.ts +3 -2
  159. package/dist/shared-tree/index.d.ts.map +1 -1
  160. package/dist/shared-tree/index.js +2 -1
  161. package/dist/shared-tree/index.js.map +1 -1
  162. package/dist/shared-tree/schematizeTree.d.ts +1 -1
  163. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  164. package/dist/shared-tree/schematizeTree.js +6 -6
  165. package/dist/shared-tree/schematizeTree.js.map +1 -1
  166. package/dist/shared-tree/schematizingTreeView.d.ts +10 -1
  167. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  168. package/dist/shared-tree/schematizingTreeView.js +51 -12
  169. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  170. package/dist/shared-tree/sharedTree.d.ts +31 -10
  171. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  172. package/dist/shared-tree/sharedTree.js +106 -15
  173. package/dist/shared-tree/sharedTree.js.map +1 -1
  174. package/dist/shared-tree/transactionTypes.d.ts +105 -0
  175. package/dist/shared-tree/transactionTypes.d.ts.map +1 -0
  176. package/dist/shared-tree/transactionTypes.js +13 -0
  177. package/dist/shared-tree/transactionTypes.js.map +1 -0
  178. package/dist/shared-tree/treeApi.d.ts +1 -25
  179. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  180. package/dist/shared-tree/treeApi.js +4 -8
  181. package/dist/shared-tree/treeApi.js.map +1 -1
  182. package/dist/shared-tree/treeCheckout.d.ts +39 -13
  183. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  184. package/dist/shared-tree/treeCheckout.js +275 -128
  185. package/dist/shared-tree/treeCheckout.js.map +1 -1
  186. package/dist/shared-tree-core/branch.d.ts +13 -35
  187. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  188. package/dist/shared-tree-core/branch.js +12 -77
  189. package/dist/shared-tree-core/branch.js.map +1 -1
  190. package/dist/shared-tree-core/branchCommitEnricher.d.ts +7 -1
  191. package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  192. package/dist/shared-tree-core/branchCommitEnricher.js +16 -18
  193. package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
  194. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  195. package/dist/shared-tree-core/editManager.js +2 -2
  196. package/dist/shared-tree-core/editManager.js.map +1 -1
  197. package/dist/shared-tree-core/index.d.ts +3 -3
  198. package/dist/shared-tree-core/index.d.ts.map +1 -1
  199. package/dist/shared-tree-core/index.js +2 -2
  200. package/dist/shared-tree-core/index.js.map +1 -1
  201. package/dist/shared-tree-core/sharedTreeCore.d.ts +2 -9
  202. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  203. package/dist/shared-tree-core/sharedTreeCore.js +4 -16
  204. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  205. package/dist/shared-tree-core/transaction.d.ts +38 -0
  206. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  207. package/dist/shared-tree-core/transaction.js +118 -6
  208. package/dist/shared-tree-core/transaction.js.map +1 -1
  209. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  210. package/dist/simple-tree/api/conciseTree.js +1 -1
  211. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  212. package/dist/simple-tree/api/create.d.ts.map +1 -1
  213. package/dist/simple-tree/api/create.js +5 -1
  214. package/dist/simple-tree/api/create.js.map +1 -1
  215. package/dist/simple-tree/api/customTree.d.ts +14 -2
  216. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  217. package/dist/simple-tree/api/customTree.js +53 -3
  218. package/dist/simple-tree/api/customTree.js.map +1 -1
  219. package/dist/simple-tree/api/index.d.ts +3 -2
  220. package/dist/simple-tree/api/index.d.ts.map +1 -1
  221. package/dist/simple-tree/api/index.js +6 -1
  222. package/dist/simple-tree/api/index.js.map +1 -1
  223. package/dist/simple-tree/api/jsonSchema.d.ts +6 -0
  224. package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
  225. package/dist/simple-tree/api/jsonSchema.js.map +1 -1
  226. package/dist/simple-tree/api/schemaFactory.d.ts +65 -8
  227. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  228. package/dist/simple-tree/api/schemaFactory.js +10 -4
  229. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  230. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +83 -0
  231. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -0
  232. package/dist/simple-tree/api/schemaFactoryAlpha.js +90 -0
  233. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -0
  234. package/dist/simple-tree/api/simpleSchema.d.ts +8 -2
  235. package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
  236. package/dist/simple-tree/api/simpleSchema.js.map +1 -1
  237. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +13 -10
  238. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  239. package/dist/simple-tree/api/simpleTreeIndex.js +3 -1
  240. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  241. package/dist/simple-tree/api/storedSchema.d.ts +4 -4
  242. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  243. package/dist/simple-tree/api/storedSchema.js +8 -21
  244. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  245. package/dist/simple-tree/api/testRecursiveDomain.d.ts +5 -5
  246. package/dist/simple-tree/api/tree.d.ts +61 -0
  247. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  248. package/dist/simple-tree/api/tree.js.map +1 -1
  249. package/dist/simple-tree/api/verboseTree.js +1 -1
  250. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  251. package/dist/simple-tree/api/view.d.ts +14 -9
  252. package/dist/simple-tree/api/view.d.ts.map +1 -1
  253. package/dist/simple-tree/api/view.js +129 -40
  254. package/dist/simple-tree/api/view.js.map +1 -1
  255. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  256. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +11 -11
  257. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  258. package/dist/simple-tree/arrayNode.d.ts +2 -2
  259. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  260. package/dist/simple-tree/arrayNode.js +2 -1
  261. package/dist/simple-tree/arrayNode.js.map +1 -1
  262. package/dist/simple-tree/core/treeNodeSchema.d.ts +10 -6
  263. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  264. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  265. package/dist/simple-tree/index.d.ts +3 -3
  266. package/dist/simple-tree/index.d.ts.map +1 -1
  267. package/dist/simple-tree/index.js +6 -2
  268. package/dist/simple-tree/index.js.map +1 -1
  269. package/dist/simple-tree/leafNodeSchema.d.ts +5 -20
  270. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  271. package/dist/simple-tree/leafNodeSchema.js +0 -15
  272. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  273. package/dist/simple-tree/mapNode.d.ts +2 -2
  274. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  275. package/dist/simple-tree/mapNode.js +2 -1
  276. package/dist/simple-tree/mapNode.js.map +1 -1
  277. package/dist/simple-tree/objectNode.d.ts +9 -4
  278. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  279. package/dist/simple-tree/objectNode.js +19 -2
  280. package/dist/simple-tree/objectNode.js.map +1 -1
  281. package/dist/simple-tree/objectNodeTypes.d.ts +6 -2
  282. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
  283. package/dist/simple-tree/objectNodeTypes.js.map +1 -1
  284. package/dist/simple-tree/schemaTypes.d.ts +51 -3
  285. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  286. package/dist/simple-tree/schemaTypes.js.map +1 -1
  287. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  288. package/dist/simple-tree/toStoredSchema.js +18 -13
  289. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  290. package/dist/util/brand.d.ts +0 -2
  291. package/dist/util/brand.d.ts.map +1 -1
  292. package/dist/util/brand.js +0 -1
  293. package/dist/util/brand.js.map +1 -1
  294. package/dist/util/index.d.ts +2 -2
  295. package/dist/util/index.d.ts.map +1 -1
  296. package/dist/util/index.js +4 -5
  297. package/dist/util/index.js.map +1 -1
  298. package/dist/util/rangeMap.d.ts +72 -42
  299. package/dist/util/rangeMap.d.ts.map +1 -1
  300. package/dist/util/rangeMap.js +161 -151
  301. package/dist/util/rangeMap.js.map +1 -1
  302. package/dist/util/typeCheck.d.ts +0 -2
  303. package/dist/util/typeCheck.d.ts.map +1 -1
  304. package/dist/util/typeCheck.js.map +1 -1
  305. package/dist/util/utils.d.ts +35 -1
  306. package/dist/util/utils.d.ts.map +1 -1
  307. package/dist/util/utils.js +32 -1
  308. package/dist/util/utils.js.map +1 -1
  309. package/lib/alpha.d.ts +11 -0
  310. package/lib/beta.d.ts +2 -0
  311. package/lib/core/index.d.ts +2 -2
  312. package/lib/core/index.d.ts.map +1 -1
  313. package/lib/core/index.js +2 -2
  314. package/lib/core/index.js.map +1 -1
  315. package/lib/core/rebase/utils.d.ts.map +1 -1
  316. package/lib/core/rebase/utils.js +3 -10
  317. package/lib/core/rebase/utils.js.map +1 -1
  318. package/lib/core/schema-stored/format.d.ts +0 -3
  319. package/lib/core/schema-stored/format.d.ts.map +1 -1
  320. package/lib/core/schema-stored/format.js.map +1 -1
  321. package/lib/core/schema-stored/schema.d.ts +12 -10
  322. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  323. package/lib/core/schema-stored/schema.js +3 -5
  324. package/lib/core/schema-stored/schema.js.map +1 -1
  325. package/lib/core/schema-view/index.d.ts +1 -1
  326. package/lib/core/schema-view/index.d.ts.map +1 -1
  327. package/lib/core/schema-view/index.js +1 -1
  328. package/lib/core/schema-view/index.js.map +1 -1
  329. package/lib/core/schema-view/view.d.ts +0 -7
  330. package/lib/core/schema-view/view.d.ts.map +1 -1
  331. package/lib/core/schema-view/view.js +0 -11
  332. package/lib/core/schema-view/view.js.map +1 -1
  333. package/lib/{feature-libraries/chunked-forest → core/tree}/chunk.d.ts +2 -1
  334. package/lib/core/tree/chunk.d.ts.map +1 -0
  335. package/lib/{feature-libraries/chunked-forest → core/tree}/chunk.js +1 -1
  336. package/lib/core/tree/chunk.js.map +1 -0
  337. package/lib/core/tree/index.d.ts +1 -0
  338. package/lib/core/tree/index.d.ts.map +1 -1
  339. package/lib/core/tree/index.js +1 -0
  340. package/lib/core/tree/index.js.map +1 -1
  341. package/lib/core/tree/treeTextFormat.d.ts +0 -5
  342. package/lib/core/tree/treeTextFormat.d.ts.map +1 -1
  343. package/lib/core/tree/treeTextFormat.js.map +1 -1
  344. package/lib/core/tree/types.d.ts +0 -5
  345. package/lib/core/tree/types.d.ts.map +1 -1
  346. package/lib/core/tree/types.js +0 -1
  347. package/lib/core/tree/types.js.map +1 -1
  348. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts +1 -2
  349. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  350. package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -1
  351. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  352. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +1 -2
  353. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  354. package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -2
  355. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  356. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts +1 -2
  357. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  358. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  359. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts +1 -2
  360. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts.map +1 -1
  361. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  362. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -2
  363. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  364. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  365. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  366. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  367. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  368. package/lib/feature-libraries/chunked-forest/emptyChunk.d.ts +1 -1
  369. package/lib/feature-libraries/chunked-forest/emptyChunk.d.ts.map +1 -1
  370. package/lib/feature-libraries/chunked-forest/emptyChunk.js +1 -2
  371. package/lib/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
  372. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  373. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  374. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  375. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  376. package/lib/feature-libraries/chunked-forest/sequenceChunk.d.ts +1 -1
  377. package/lib/feature-libraries/chunked-forest/sequenceChunk.d.ts.map +1 -1
  378. package/lib/feature-libraries/chunked-forest/sequenceChunk.js +1 -1
  379. package/lib/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
  380. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts +1 -2
  381. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  382. package/lib/feature-libraries/chunked-forest/uniformChunk.js +1 -1
  383. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  384. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +10 -0
  385. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  386. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
  387. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  388. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  389. package/lib/feature-libraries/default-schema/defaultSchema.js +1 -0
  390. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  391. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  392. package/lib/feature-libraries/default-schema/schemaChecker.js +2 -1
  393. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  394. package/lib/feature-libraries/index.d.ts +1 -2
  395. package/lib/feature-libraries/index.d.ts.map +1 -1
  396. package/lib/feature-libraries/index.js +1 -2
  397. package/lib/feature-libraries/index.js.map +1 -1
  398. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts +8 -1
  399. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  400. package/lib/feature-libraries/indexing/anchorTreeIndex.js +31 -5
  401. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  402. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +1 -1
  403. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  404. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +9 -3
  405. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  406. package/lib/feature-libraries/modular-schema/discrepancies.d.ts +84 -24
  407. package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
  408. package/lib/feature-libraries/modular-schema/discrepancies.js +25 -28
  409. package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  410. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +12 -5
  411. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  412. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  413. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  414. package/lib/feature-libraries/modular-schema/genericFieldKind.js +2 -1
  415. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  416. package/lib/feature-libraries/modular-schema/index.d.ts +2 -2
  417. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  418. package/lib/feature-libraries/modular-schema/index.js +1 -1
  419. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  420. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts +0 -1
  421. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  422. package/lib/feature-libraries/modular-schema/isNeverTree.js +0 -1
  423. package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  424. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +1 -0
  425. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  426. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +89 -25
  427. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  428. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +12 -0
  429. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  430. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  431. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  432. package/lib/feature-libraries/optional-field/optionalField.js +24 -4
  433. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  434. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
  435. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  436. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
  437. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  438. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +12 -12
  439. package/lib/feature-libraries/sequence-field/formatV1.d.ts +99 -99
  440. package/lib/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
  441. package/lib/feature-libraries/sequence-field/formatV2.d.ts +76 -76
  442. package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  443. package/lib/feature-libraries/sequence-field/formatV3.d.ts +54 -54
  444. package/lib/feature-libraries/sequence-field/types.d.ts +0 -1
  445. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  446. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  447. package/lib/feature-libraries/sequence-field/utils.d.ts +2 -2
  448. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  449. package/lib/feature-libraries/sequence-field/utils.js +14 -5
  450. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  451. package/lib/index.d.ts +4 -5
  452. package/lib/index.d.ts.map +1 -1
  453. package/lib/index.js +3 -4
  454. package/lib/index.js.map +1 -1
  455. package/lib/legacy.d.ts +2 -0
  456. package/lib/packageVersion.d.ts +1 -1
  457. package/lib/packageVersion.js +1 -1
  458. package/lib/packageVersion.js.map +1 -1
  459. package/lib/public.d.ts +2 -0
  460. package/lib/shared-tree/index.d.ts +3 -2
  461. package/lib/shared-tree/index.d.ts.map +1 -1
  462. package/lib/shared-tree/index.js +2 -1
  463. package/lib/shared-tree/index.js.map +1 -1
  464. package/lib/shared-tree/schematizeTree.d.ts +1 -1
  465. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  466. package/lib/shared-tree/schematizeTree.js +7 -7
  467. package/lib/shared-tree/schematizeTree.js.map +1 -1
  468. package/lib/shared-tree/schematizingTreeView.d.ts +10 -1
  469. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  470. package/lib/shared-tree/schematizingTreeView.js +56 -17
  471. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  472. package/lib/shared-tree/sharedTree.d.ts +31 -10
  473. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  474. package/lib/shared-tree/sharedTree.js +107 -16
  475. package/lib/shared-tree/sharedTree.js.map +1 -1
  476. package/lib/shared-tree/transactionTypes.d.ts +105 -0
  477. package/lib/shared-tree/transactionTypes.d.ts.map +1 -0
  478. package/lib/shared-tree/transactionTypes.js +10 -0
  479. package/lib/shared-tree/transactionTypes.js.map +1 -0
  480. package/lib/shared-tree/treeApi.d.ts +1 -25
  481. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  482. package/lib/shared-tree/treeApi.js +1 -5
  483. package/lib/shared-tree/treeApi.js.map +1 -1
  484. package/lib/shared-tree/treeCheckout.d.ts +39 -13
  485. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  486. package/lib/shared-tree/treeCheckout.js +277 -130
  487. package/lib/shared-tree/treeCheckout.js.map +1 -1
  488. package/lib/shared-tree-core/branch.d.ts +13 -35
  489. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  490. package/lib/shared-tree-core/branch.js +12 -76
  491. package/lib/shared-tree-core/branch.js.map +1 -1
  492. package/lib/shared-tree-core/branchCommitEnricher.d.ts +7 -1
  493. package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  494. package/lib/shared-tree-core/branchCommitEnricher.js +16 -18
  495. package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
  496. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  497. package/lib/shared-tree-core/editManager.js +3 -3
  498. package/lib/shared-tree-core/editManager.js.map +1 -1
  499. package/lib/shared-tree-core/index.d.ts +3 -3
  500. package/lib/shared-tree-core/index.d.ts.map +1 -1
  501. package/lib/shared-tree-core/index.js +2 -2
  502. package/lib/shared-tree-core/index.js.map +1 -1
  503. package/lib/shared-tree-core/sharedTreeCore.d.ts +2 -9
  504. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  505. package/lib/shared-tree-core/sharedTreeCore.js +4 -16
  506. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  507. package/lib/shared-tree-core/transaction.d.ts +38 -0
  508. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  509. package/lib/shared-tree-core/transaction.js +112 -1
  510. package/lib/shared-tree-core/transaction.js.map +1 -1
  511. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  512. package/lib/simple-tree/api/conciseTree.js +2 -2
  513. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  514. package/lib/simple-tree/api/create.d.ts.map +1 -1
  515. package/lib/simple-tree/api/create.js +5 -1
  516. package/lib/simple-tree/api/create.js.map +1 -1
  517. package/lib/simple-tree/api/customTree.d.ts +14 -2
  518. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  519. package/lib/simple-tree/api/customTree.js +50 -2
  520. package/lib/simple-tree/api/customTree.js.map +1 -1
  521. package/lib/simple-tree/api/index.d.ts +3 -2
  522. package/lib/simple-tree/api/index.d.ts.map +1 -1
  523. package/lib/simple-tree/api/index.js +3 -1
  524. package/lib/simple-tree/api/index.js.map +1 -1
  525. package/lib/simple-tree/api/jsonSchema.d.ts +6 -0
  526. package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
  527. package/lib/simple-tree/api/jsonSchema.js.map +1 -1
  528. package/lib/simple-tree/api/schemaFactory.d.ts +65 -8
  529. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  530. package/lib/simple-tree/api/schemaFactory.js +9 -3
  531. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  532. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +83 -0
  533. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -0
  534. package/lib/simple-tree/api/schemaFactoryAlpha.js +86 -0
  535. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -0
  536. package/lib/simple-tree/api/simpleSchema.d.ts +8 -2
  537. package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
  538. package/lib/simple-tree/api/simpleSchema.js.map +1 -1
  539. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +14 -11
  540. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  541. package/lib/simple-tree/api/simpleTreeIndex.js +3 -1
  542. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  543. package/lib/simple-tree/api/storedSchema.d.ts +4 -4
  544. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  545. package/lib/simple-tree/api/storedSchema.js +5 -18
  546. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  547. package/lib/simple-tree/api/testRecursiveDomain.d.ts +5 -5
  548. package/lib/simple-tree/api/tree.d.ts +61 -0
  549. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  550. package/lib/simple-tree/api/tree.js.map +1 -1
  551. package/lib/simple-tree/api/verboseTree.js +2 -2
  552. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  553. package/lib/simple-tree/api/view.d.ts +14 -9
  554. package/lib/simple-tree/api/view.d.ts.map +1 -1
  555. package/lib/simple-tree/api/view.js +131 -42
  556. package/lib/simple-tree/api/view.js.map +1 -1
  557. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  558. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +12 -12
  559. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  560. package/lib/simple-tree/arrayNode.d.ts +2 -2
  561. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  562. package/lib/simple-tree/arrayNode.js +2 -1
  563. package/lib/simple-tree/arrayNode.js.map +1 -1
  564. package/lib/simple-tree/core/treeNodeSchema.d.ts +10 -6
  565. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  566. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  567. package/lib/simple-tree/index.d.ts +3 -3
  568. package/lib/simple-tree/index.d.ts.map +1 -1
  569. package/lib/simple-tree/index.js +2 -2
  570. package/lib/simple-tree/index.js.map +1 -1
  571. package/lib/simple-tree/leafNodeSchema.d.ts +5 -20
  572. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  573. package/lib/simple-tree/leafNodeSchema.js +0 -15
  574. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  575. package/lib/simple-tree/mapNode.d.ts +2 -2
  576. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  577. package/lib/simple-tree/mapNode.js +2 -1
  578. package/lib/simple-tree/mapNode.js.map +1 -1
  579. package/lib/simple-tree/objectNode.d.ts +9 -4
  580. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  581. package/lib/simple-tree/objectNode.js +17 -1
  582. package/lib/simple-tree/objectNode.js.map +1 -1
  583. package/lib/simple-tree/objectNodeTypes.d.ts +6 -2
  584. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
  585. package/lib/simple-tree/objectNodeTypes.js.map +1 -1
  586. package/lib/simple-tree/schemaTypes.d.ts +51 -3
  587. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  588. package/lib/simple-tree/schemaTypes.js.map +1 -1
  589. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  590. package/lib/simple-tree/toStoredSchema.js +19 -14
  591. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  592. package/lib/util/brand.d.ts +0 -2
  593. package/lib/util/brand.d.ts.map +1 -1
  594. package/lib/util/brand.js +0 -1
  595. package/lib/util/brand.js.map +1 -1
  596. package/lib/util/index.d.ts +2 -2
  597. package/lib/util/index.d.ts.map +1 -1
  598. package/lib/util/index.js +2 -2
  599. package/lib/util/index.js.map +1 -1
  600. package/lib/util/rangeMap.d.ts +72 -42
  601. package/lib/util/rangeMap.d.ts.map +1 -1
  602. package/lib/util/rangeMap.js +159 -146
  603. package/lib/util/rangeMap.js.map +1 -1
  604. package/lib/util/typeCheck.d.ts +0 -2
  605. package/lib/util/typeCheck.d.ts.map +1 -1
  606. package/lib/util/typeCheck.js.map +1 -1
  607. package/lib/util/utils.d.ts +35 -1
  608. package/lib/util/utils.d.ts.map +1 -1
  609. package/lib/util/utils.js +29 -0
  610. package/lib/util/utils.js.map +1 -1
  611. package/package.json +23 -23
  612. package/src/core/index.ts +5 -1
  613. package/src/core/rebase/utils.ts +17 -20
  614. package/src/core/schema-stored/format.ts +0 -3
  615. package/src/core/schema-stored/schema.ts +13 -10
  616. package/src/core/schema-view/index.ts +0 -1
  617. package/src/core/schema-view/view.ts +0 -11
  618. package/src/{feature-libraries/chunked-forest → core/tree}/chunk.ts +4 -4
  619. package/src/core/tree/index.ts +8 -0
  620. package/src/core/tree/treeTextFormat.ts +0 -5
  621. package/src/core/tree/types.ts +0 -5
  622. package/src/feature-libraries/chunked-forest/basicChunk.ts +4 -2
  623. package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -1
  624. package/src/feature-libraries/chunked-forest/chunkedForest.ts +2 -1
  625. package/src/feature-libraries/chunked-forest/codec/chunkCodecUtilities.ts +1 -2
  626. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +6 -2
  627. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -1
  628. package/src/feature-libraries/chunked-forest/emptyChunk.ts +4 -2
  629. package/src/feature-libraries/chunked-forest/index.ts +1 -1
  630. package/src/feature-libraries/chunked-forest/sequenceChunk.ts +1 -1
  631. package/src/feature-libraries/chunked-forest/uniformChunk.ts +4 -1
  632. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +14 -1
  633. package/src/feature-libraries/default-schema/defaultSchema.ts +1 -0
  634. package/src/feature-libraries/default-schema/schemaChecker.ts +4 -1
  635. package/src/feature-libraries/index.ts +13 -1
  636. package/src/feature-libraries/indexing/anchorTreeIndex.ts +34 -5
  637. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +9 -9
  638. package/src/feature-libraries/modular-schema/discrepancies.ts +76 -38
  639. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +13 -9
  640. package/src/feature-libraries/modular-schema/genericFieldKind.ts +4 -2
  641. package/src/feature-libraries/modular-schema/index.ts +14 -0
  642. package/src/feature-libraries/modular-schema/isNeverTree.ts +0 -2
  643. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +124 -31
  644. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +12 -0
  645. package/src/feature-libraries/optional-field/optionalField.ts +34 -5
  646. package/src/feature-libraries/sequence-field/types.ts +0 -1
  647. package/src/feature-libraries/sequence-field/utils.ts +18 -7
  648. package/src/index.ts +12 -29
  649. package/src/packageVersion.ts +1 -1
  650. package/src/shared-tree/index.ts +13 -2
  651. package/src/shared-tree/schematizeTree.ts +6 -10
  652. package/src/shared-tree/schematizingTreeView.ts +102 -23
  653. package/src/shared-tree/sharedTree.ts +181 -44
  654. package/src/shared-tree/transactionTypes.ts +125 -0
  655. package/src/shared-tree/treeApi.ts +1 -28
  656. package/src/shared-tree/treeCheckout.ts +358 -175
  657. package/src/shared-tree-core/branch.ts +29 -122
  658. package/src/shared-tree-core/branchCommitEnricher.ts +19 -20
  659. package/src/shared-tree-core/editManager.ts +3 -8
  660. package/src/shared-tree-core/index.ts +2 -1
  661. package/src/shared-tree-core/sharedTreeCore.ts +8 -19
  662. package/src/shared-tree-core/transaction.ts +145 -0
  663. package/src/simple-tree/api/conciseTree.ts +2 -2
  664. package/src/simple-tree/api/create.ts +5 -1
  665. package/src/simple-tree/api/customTree.ts +69 -1
  666. package/src/simple-tree/api/index.ts +13 -2
  667. package/src/simple-tree/api/jsonSchema.ts +7 -0
  668. package/src/simple-tree/api/schemaFactory.ts +91 -3
  669. package/src/simple-tree/api/schemaFactoryAlpha.ts +253 -0
  670. package/src/simple-tree/api/simpleSchema.ts +9 -2
  671. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +22 -12
  672. package/src/simple-tree/api/simpleTreeIndex.ts +2 -0
  673. package/src/simple-tree/api/storedSchema.ts +7 -22
  674. package/src/simple-tree/api/tree.ts +78 -0
  675. package/src/simple-tree/api/verboseTree.ts +2 -2
  676. package/src/simple-tree/api/view.ts +197 -51
  677. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +19 -13
  678. package/src/simple-tree/arrayNode.ts +7 -1
  679. package/src/simple-tree/core/treeNodeSchema.ts +51 -7
  680. package/src/simple-tree/index.ts +9 -0
  681. package/src/simple-tree/leafNodeSchema.ts +0 -19
  682. package/src/simple-tree/mapNode.ts +7 -1
  683. package/src/simple-tree/objectNode.ts +33 -3
  684. package/src/simple-tree/objectNodeTypes.ts +9 -1
  685. package/src/simple-tree/schemaTypes.ts +57 -3
  686. package/src/simple-tree/toStoredSchema.ts +25 -19
  687. package/src/util/brand.ts +0 -2
  688. package/src/util/index.ts +3 -6
  689. package/src/util/rangeMap.ts +199 -189
  690. package/src/util/typeCheck.ts +0 -2
  691. package/src/util/utils.ts +73 -1
  692. package/dist/feature-libraries/chunked-forest/chunk.d.ts.map +0 -1
  693. package/dist/feature-libraries/chunked-forest/chunk.js.map +0 -1
  694. package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -38
  695. package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts.map +0 -1
  696. package/dist/feature-libraries/memoizedIdRangeAllocator.js +0 -74
  697. package/dist/feature-libraries/memoizedIdRangeAllocator.js.map +0 -1
  698. package/lib/feature-libraries/chunked-forest/chunk.d.ts.map +0 -1
  699. package/lib/feature-libraries/chunked-forest/chunk.js.map +0 -1
  700. package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -38
  701. package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts.map +0 -1
  702. package/lib/feature-libraries/memoizedIdRangeAllocator.js +0 -71
  703. package/lib/feature-libraries/memoizedIdRangeAllocator.js.map +0 -1
  704. package/src/feature-libraries/memoizedIdRangeAllocator.ts +0 -112
@@ -11,8 +11,12 @@ import {
11
11
  EmptyKey,
12
12
  forEachField,
13
13
  inCursorField,
14
+ LeafNodeStoredSchema,
14
15
  mapCursorField,
16
+ ObjectNodeStoredSchema,
15
17
  type ITreeCursor,
18
+ type TreeNodeSchemaIdentifier,
19
+ type TreeNodeStoredSchema,
16
20
  } from "../../core/index.js";
17
21
  import { fail } from "../../util/index.js";
18
22
  import type { TreeLeafValue } from "../schemaTypes.js";
@@ -25,6 +29,7 @@ import {
25
29
  stringSchema,
26
30
  } from "../leafNodeSchema.js";
27
31
  import { isObjectNodeSchema } from "../objectNodeTypes.js";
32
+ import { FieldKinds, valueSchemaAllows } from "../../feature-libraries/index.js";
28
33
 
29
34
  /**
30
35
  * Options for how to encode a tree.
@@ -63,7 +68,7 @@ export type CustomTreeNode<TChild> = TChild[] | { [key: string]: TChild };
63
68
  /**
64
69
  * Builds an {@link CustomTree} from a cursor in Nodes mode.
65
70
  */
66
- export function customFromCursorInner<TChild, THandle>(
71
+ export function customFromCursor<TChild, THandle>(
67
72
  reader: ITreeCursor,
68
73
  options: Required<EncodeOptions<THandle>>,
69
74
  schema: ReadonlyMap<string, TreeNodeSchema>,
@@ -118,3 +123,66 @@ export function customFromCursorInner<TChild, THandle>(
118
123
  }
119
124
  }
120
125
  }
126
+
127
+ /**
128
+ * Builds an {@link CustomTree} from a cursor in Nodes mode.
129
+ * @remarks
130
+ * Uses stored keys and stored schema.
131
+ */
132
+ export function customFromCursorStored<TChild>(
133
+ reader: ITreeCursor,
134
+ schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
135
+ childHandler: (
136
+ reader: ITreeCursor,
137
+ schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
138
+ ) => TChild,
139
+ ): CustomTree<TChild, IFluidHandle> {
140
+ const type = reader.type;
141
+ const nodeSchema = schema.get(type) ?? fail("missing schema for type in cursor");
142
+
143
+ if (nodeSchema instanceof LeafNodeStoredSchema) {
144
+ assert(valueSchemaAllows(nodeSchema.leafValue, reader.value), 0xa9c /* invalid value */);
145
+ return reader.value;
146
+ }
147
+
148
+ assert(reader.value === undefined, 0xa9d /* out of schema: unexpected value */);
149
+
150
+ const arrayTypes = tryStoredSchemaAsArray(nodeSchema);
151
+ if (arrayTypes !== undefined) {
152
+ const field = inCursorField(reader, EmptyKey, () =>
153
+ mapCursorField(reader, () => childHandler(reader, schema)),
154
+ );
155
+ return field;
156
+ }
157
+
158
+ const fields: Record<string, TChild> = {};
159
+ forEachField(reader, () => {
160
+ const children = mapCursorField(reader, () => childHandler(reader, schema));
161
+ if (children.length === 1) {
162
+ const storedKey = reader.getFieldKey();
163
+ // Length is checked above.
164
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
165
+ fields[storedKey] = children[0]!;
166
+ } else {
167
+ assert(children.length === 0, 0xa9e /* invalid children number */);
168
+ }
169
+ });
170
+ return fields;
171
+ }
172
+
173
+ /**
174
+ * Assumes `schema` corresponds to a simple-tree schema.
175
+ * If it is an array schema, returns the allowed types for the array field.
176
+ * Otherwise returns `undefined`.
177
+ */
178
+ export function tryStoredSchemaAsArray(
179
+ schema: TreeNodeStoredSchema,
180
+ ): ReadonlySet<string> | undefined {
181
+ if (schema instanceof ObjectNodeStoredSchema) {
182
+ const empty = schema.getFieldSchema(EmptyKey);
183
+ if (empty.kind === FieldKinds.sequence.identifier) {
184
+ assert(schema.objectNodeFields.size === 1, 0xa9f /* invalid schema */);
185
+ return empty.types;
186
+ }
187
+ }
188
+ }
@@ -17,7 +17,12 @@ export {
17
17
  type TreeBranchEvents,
18
18
  asTreeViewAlpha,
19
19
  } from "./tree.js";
20
- export { SchemaFactory, type ScopedSchemaName } from "./schemaFactory.js";
20
+ export {
21
+ SchemaFactory,
22
+ type ScopedSchemaName,
23
+ type SchemaFactoryObjectOptions,
24
+ } from "./schemaFactory.js";
25
+ export { SchemaFactoryAlpha } from "./schemaFactoryAlpha.js";
21
26
  export type {
22
27
  ValidateRecursiveSchema,
23
28
  FixRecursiveArraySchema,
@@ -90,7 +95,13 @@ export {
90
95
  verboseFromCursor,
91
96
  } from "./verboseTree.js";
92
97
 
93
- export type { EncodeOptions } from "./customTree.js";
98
+ export {
99
+ type EncodeOptions,
100
+ customFromCursorStored,
101
+ type CustomTreeNode,
102
+ type CustomTreeValue,
103
+ tryStoredSchemaAsArray,
104
+ } from "./customTree.js";
94
105
 
95
106
  export { type ConciseTree, conciseFromCursor } from "./conciseTree.js";
96
107
 
@@ -58,6 +58,13 @@ export interface JsonNodeSchemaBase<
58
58
  * {@inheritDoc JsonSchemaType}
59
59
  */
60
60
  readonly type: TJsonSchemaType;
61
+
62
+ /**
63
+ * Description of the node schema.
64
+ * @remarks Derived from {@link NodeSchemaMetadata.description}.
65
+ * @see {@link https://json-schema.org/draft/2020-12/json-schema-validation#name-title-and-description}
66
+ */
67
+ readonly description?: string | undefined;
61
68
  }
62
69
 
63
70
  /**
@@ -18,6 +18,9 @@ import {
18
18
  getOrCreate,
19
19
  isReadonlyArray,
20
20
  } from "../../util/index.js";
21
+ // This import is required for intellisense in @link doc comments on mouseover in VSCode.
22
+ // eslint-disable-next-line unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars
23
+ import type { TreeAlpha } from "../../shared-tree/index.js";
21
24
 
22
25
  import {
23
26
  booleanSchema,
@@ -37,6 +40,7 @@ import {
37
40
  createFieldSchema,
38
41
  type DefaultProvider,
39
42
  getDefaultProvider,
43
+ type NodeSchemaOptions,
40
44
  } from "../schemaTypes.js";
41
45
  import { inPrototypeChain } from "../core/index.js";
42
46
  import type {
@@ -74,6 +78,7 @@ import type {
74
78
  import { createFieldSchemaUnsafe } from "./schemaFactoryRecursive.js";
75
79
  import { TreeNodeValid } from "../treeNodeValid.js";
76
80
  import { isLazy } from "../flexList.js";
81
+
77
82
  /**
78
83
  * Gets the leaf domain schema compatible with a given {@link TreeValue}.
79
84
  */
@@ -97,6 +102,64 @@ export function schemaFromValue(value: TreeValue): TreeNodeSchema {
97
102
  }
98
103
  }
99
104
 
105
+ /**
106
+ * Options when declaring an {@link SchemaFactory.object|object node}'s schema
107
+ *
108
+ * @alpha
109
+ */
110
+ export interface SchemaFactoryObjectOptions<TCustomMetadata = unknown>
111
+ extends NodeSchemaOptions<TCustomMetadata> {
112
+ /**
113
+ * Allow nodes typed with this object node schema to contain optional fields that are not present in the schema declaration.
114
+ * Such nodes can come into existence either via import APIs (see remarks) or by way of collaboration with another client
115
+ * that has upgraded the document's schema to include those optional fields.
116
+ *
117
+ * @defaultValue `false`
118
+ * @remarks
119
+ * The advantage of enabling this option is that it allows an application ecosystem with staged rollout to more quickly
120
+ * upgrade documents to include schema for new optional features.
121
+ *
122
+ * However, it does come with trade-offs that applications should weigh carefully when it comes to interactions between
123
+ * code and documents.
124
+ * When opening such documents, the API presented is still determined by the view schema.
125
+ * This can have implications on the behavior of edits or code which uses portions of the view schema,
126
+ * since this may inadvertently drop data which is present in those optional fields in the document schema.
127
+ *
128
+ * Consider the following example:
129
+ *
130
+ * ```typescript
131
+ * const sf = new SchemaFactory("com.example");
132
+ * class PersonView extends sf.object("Person", { name: sf.string }, { allowUnknownOptionalFields: true }) {}
133
+ * class PersonStored extends sf.object("Person", { name: sf.string, nickname: sf.optional(sf.string) }) {}
134
+ *
135
+ * // Say we have a document which uses `PersonStored` in its schema, and application code constructs
136
+ * // a tree view using `PersonView`. If the application for some reason had implemented a function like this:
137
+ * function clonePerson(a: PersonView): PersonView {
138
+ * return new PersonView({ name: a.name });
139
+ * }
140
+ * // ...or even like this:
141
+ * function clonePerson(a: PersonView): PersonView {
142
+ * return new PersonView({ ...a})
143
+ * }
144
+ * // Then the alleged clone wouldn't actually clone the entire person in either case, it would drop the nickname.
145
+ * ```
146
+ *
147
+ * If an application wants to be particularly careful to preserve all data on a node when editing it, it can use
148
+ * {@link TreeAlpha.(importVerbose:2)|import}/{@link TreeAlpha.(exportVerbose:2)|export} APIs with persistent keys.
149
+ *
150
+ * Note that public API methods which operate on entire nodes (such as `moveTo`, `moveToEnd`, etc. on arrays) do not encounter
151
+ * this problem as SharedTree's implementation stores the entire node in its lower layers. It's only when application code
152
+ * reaches into a node (either by accessing its fields, spreading it, or some other means) that this problem arises.
153
+ */
154
+ allowUnknownOptionalFields?: boolean;
155
+ }
156
+
157
+ export const defaultSchemaFactoryObjectOptions: Required<
158
+ Omit<SchemaFactoryObjectOptions, "metadata">
159
+ > = {
160
+ allowUnknownOptionalFields: false,
161
+ };
162
+
100
163
  /**
101
164
  * The name of a schema produced by {@link SchemaFactory}, including its optional scope prefix.
102
165
  *
@@ -333,12 +396,19 @@ export class SchemaFactory<
333
396
  true,
334
397
  T
335
398
  > {
336
- return objectSchema(this.scoped(name), fields, true);
399
+ return objectSchema(
400
+ this.scoped(name),
401
+ fields,
402
+ true,
403
+ defaultSchemaFactoryObjectOptions.allowUnknownOptionalFields,
404
+ );
337
405
  }
338
406
 
339
407
  /**
340
408
  * Define a structurally typed {@link TreeNodeSchema} for a {@link TreeMapNode}.
341
409
  *
410
+ * @param allowedTypes - The types that may appear as values in the map.
411
+ *
342
412
  * @remarks
343
413
  * The unique identifier for this Map is defined as a function of the provided types.
344
414
  * It is still scoped to this SchemaBuilder, but multiple calls with the same arguments will return the same schema object, providing somewhat structural typing.
@@ -375,6 +445,7 @@ export class SchemaFactory<
375
445
  * Define a {@link TreeNodeSchema} for a {@link TreeMapNode}.
376
446
  *
377
447
  * @param name - Unique identifier for this schema within this factory's scope.
448
+ * @param allowedTypes - The types that may appear as values in the map.
378
449
  *
379
450
  * @example
380
451
  * ```typescript
@@ -395,6 +466,8 @@ export class SchemaFactory<
395
466
  >;
396
467
 
397
468
  /**
469
+ * {@link SchemaFactory.map} implementation.
470
+ *
398
471
  * @privateRemarks
399
472
  * This should return `TreeNodeSchemaBoth`, however TypeScript gives an error if one of the overloads implicitly up-casts the return type of the implementation.
400
473
  * This seems like a TypeScript bug getting variance backwards for overload return types since it's erroring when the relation between the overload
@@ -469,12 +542,15 @@ export class SchemaFactory<
469
542
  implicitlyConstructable,
470
543
  // The current policy is customizable nodes don't get fake prototypes.
471
544
  !customizable,
545
+ undefined,
472
546
  );
473
547
  }
474
548
 
475
549
  /**
476
550
  * Define a structurally typed {@link TreeNodeSchema} for a {@link (TreeArrayNode:interface)}.
477
551
  *
552
+ * @param allowedTypes - The types that may appear in the array.
553
+ *
478
554
  * @remarks
479
555
  * The identifier for this Array is defined as a function of the provided types.
480
556
  * It is still scoped to this SchemaFactory, but multiple calls with the same arguments will return the same schema object, providing somewhat structural typing.
@@ -521,6 +597,7 @@ export class SchemaFactory<
521
597
  * Define (and add to this library) a {@link TreeNodeSchemaClass} for a {@link (TreeArrayNode:interface)}.
522
598
  *
523
599
  * @param name - Unique identifier for this schema within this factory's scope.
600
+ * @param allowedTypes - The types that may appear in the array.
524
601
  *
525
602
  * @example
526
603
  * ```typescript
@@ -543,6 +620,8 @@ export class SchemaFactory<
543
620
  >;
544
621
 
545
622
  /**
623
+ * {@link SchemaFactory.array} implementation.
624
+ *
546
625
  * @privateRemarks
547
626
  * This should return TreeNodeSchemaBoth: see note on "map" implementation for details.
548
627
  */
@@ -726,11 +805,20 @@ export class SchemaFactory<
726
805
  * `error TS2589: Type instantiation is excessively deep and possibly infinite.`
727
806
  * which otherwise gets reported at sometimes incorrect source locations that vary based on incremental builds.
728
807
  */
729
- // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
730
808
  public objectRecursive<
731
809
  const Name extends TName,
732
810
  const T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
733
- >(name: Name, t: T) {
811
+ >(
812
+ name: Name,
813
+ t: T,
814
+ ): TreeNodeSchemaClass<
815
+ ScopedSchemaName<TScope, Name>,
816
+ NodeKind.Object,
817
+ TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>,
818
+ object & InsertableObjectFromSchemaRecordUnsafe<T>,
819
+ false,
820
+ T
821
+ > {
734
822
  type TScopedName = ScopedSchemaName<TScope, Name>;
735
823
  return this.object(
736
824
  name,
@@ -0,0 +1,253 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type {
7
+ ScopedSchemaName,
8
+ InsertableObjectFromSchemaRecord,
9
+ TreeObjectNodeUnsafe,
10
+ InsertableObjectFromSchemaRecordUnsafe,
11
+ } from "../../internalTypes.js";
12
+ import {
13
+ defaultSchemaFactoryObjectOptions,
14
+ SchemaFactory,
15
+ type SchemaFactoryObjectOptions,
16
+ } from "./schemaFactory.js";
17
+ import type {
18
+ ImplicitAllowedTypes,
19
+ ImplicitFieldSchema,
20
+ InsertableTreeNodeFromImplicitAllowedTypes,
21
+ NodeSchemaOptions,
22
+ } from "../schemaTypes.js";
23
+ import { type TreeObjectNode, objectSchema } from "../objectNode.js";
24
+ import type { RestrictiveStringRecord } from "../../util/index.js";
25
+ import type { NodeKind, TreeNodeSchemaClass, WithType } from "../core/index.js";
26
+ import type {
27
+ InsertableTreeNodeFromImplicitAllowedTypesUnsafe,
28
+ TreeArrayNodeUnsafe,
29
+ TreeMapNodeUnsafe,
30
+ Unenforced,
31
+ } from "./typesUnsafe.js";
32
+ import { mapSchema, type MapNodeInsertableData, type TreeMapNode } from "../mapNode.js";
33
+ import { arraySchema, type TreeArrayNode } from "../arrayNode.js";
34
+
35
+ /**
36
+ * {@link SchemaFactory} with additional alpha APIs.
37
+ *
38
+ * @alpha
39
+ * @privateRemarks
40
+ *
41
+ * Some private methods on `SchemaFactory` are intentionally duplicated here to avoid increasing their exposure to `protected`.
42
+ * If we were to do so, they would be exposed on the public API surface of `SchemaFactory`.
43
+ */
44
+ export class SchemaFactoryAlpha<
45
+ out TScope extends string | undefined = string | undefined,
46
+ TName extends number | string = string,
47
+ > extends SchemaFactory<TScope, TName> {
48
+ private scoped2<Name extends TName | string>(name: Name): ScopedSchemaName<TScope, Name> {
49
+ return (
50
+ this.scope === undefined ? `${name}` : `${this.scope}.${name}`
51
+ ) as ScopedSchemaName<TScope, Name>;
52
+ }
53
+
54
+ /**
55
+ * Define a {@link TreeNodeSchemaClass} for a {@link TreeObjectNode}.
56
+ *
57
+ * @param name - Unique identifier for this schema within this factory's scope.
58
+ * @param fields - Schema for fields of the object node's schema. Defines what children can be placed under each key.
59
+ * @param options - Additional options for the schema.
60
+ */
61
+ public override object<
62
+ const Name extends TName,
63
+ const T extends RestrictiveStringRecord<ImplicitFieldSchema>,
64
+ const TCustomMetadata = unknown,
65
+ >(
66
+ name: Name,
67
+ fields: T,
68
+ options?: SchemaFactoryObjectOptions<TCustomMetadata>,
69
+ ): TreeNodeSchemaClass<
70
+ ScopedSchemaName<TScope, Name>,
71
+ NodeKind.Object,
72
+ TreeObjectNode<T, ScopedSchemaName<TScope, Name>>,
73
+ object & InsertableObjectFromSchemaRecord<T>,
74
+ true,
75
+ T,
76
+ never,
77
+ TCustomMetadata
78
+ > {
79
+ return objectSchema(
80
+ this.scoped2(name),
81
+ fields,
82
+ true,
83
+ options?.allowUnknownOptionalFields ??
84
+ defaultSchemaFactoryObjectOptions.allowUnknownOptionalFields,
85
+ options?.metadata,
86
+ );
87
+ }
88
+
89
+ /**
90
+ * {@inheritdoc SchemaFactory.objectRecursive}
91
+ */
92
+ public override objectRecursive<
93
+ const Name extends TName,
94
+ const T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
95
+ const TCustomMetadata = unknown,
96
+ >(
97
+ name: Name,
98
+ t: T,
99
+ options?: SchemaFactoryObjectOptions<TCustomMetadata>,
100
+ ): TreeNodeSchemaClass<
101
+ ScopedSchemaName<TScope, Name>,
102
+ NodeKind.Object,
103
+ TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>,
104
+ object & InsertableObjectFromSchemaRecordUnsafe<T>,
105
+ false,
106
+ T,
107
+ never,
108
+ TCustomMetadata
109
+ > {
110
+ type TScopedName = ScopedSchemaName<TScope, Name>;
111
+ return this.object(
112
+ name,
113
+ t as T & RestrictiveStringRecord<ImplicitFieldSchema>,
114
+ options,
115
+ ) as unknown as TreeNodeSchemaClass<
116
+ TScopedName,
117
+ NodeKind.Object,
118
+ TreeObjectNodeUnsafe<T, TScopedName>,
119
+ object & InsertableObjectFromSchemaRecordUnsafe<T>,
120
+ false,
121
+ T,
122
+ never,
123
+ TCustomMetadata
124
+ >;
125
+ }
126
+
127
+ /**
128
+ * Define a {@link TreeNodeSchema} for a {@link TreeMapNode}.
129
+ *
130
+ * @param name - Unique identifier for this schema within this factory's scope.
131
+ * @param allowedTypes - The types that may appear as values in the map.
132
+ * @param options - Additional options for the schema.
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * class NamedMap extends factory.map("name", factory.number, {
137
+ * metadata: { description: "A map of numbers" }
138
+ * }) {}
139
+ * ```
140
+ */
141
+ public mapAlpha<
142
+ Name extends TName,
143
+ const T extends ImplicitAllowedTypes,
144
+ const TCustomMetadata = unknown,
145
+ >(
146
+ name: Name,
147
+ allowedTypes: T,
148
+ options?: NodeSchemaOptions<TCustomMetadata>,
149
+ ): TreeNodeSchemaClass<
150
+ ScopedSchemaName<TScope, Name>,
151
+ NodeKind.Map,
152
+ TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>,
153
+ MapNodeInsertableData<T>,
154
+ true,
155
+ T,
156
+ undefined,
157
+ TCustomMetadata
158
+ > {
159
+ return mapSchema(this.scoped2(name), allowedTypes, true, true, options?.metadata);
160
+ }
161
+
162
+ /**
163
+ * {@inheritDoc SchemaFactory.objectRecursive}
164
+ */
165
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
166
+ public override mapRecursive<
167
+ Name extends TName,
168
+ const T extends Unenforced<ImplicitAllowedTypes>,
169
+ const TCustomMetadata = unknown,
170
+ >(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>) {
171
+ return this.mapAlpha(
172
+ name,
173
+ allowedTypes as T & ImplicitAllowedTypes,
174
+ options,
175
+ ) as unknown as TreeNodeSchemaClass<
176
+ ScopedSchemaName<TScope, Name>,
177
+ NodeKind.Map,
178
+ TreeMapNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>,
179
+ | {
180
+ [Symbol.iterator](): Iterator<
181
+ [string, InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>]
182
+ >;
183
+ }
184
+ | {
185
+ readonly [P in string]: InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>;
186
+ },
187
+ false,
188
+ T,
189
+ undefined,
190
+ TCustomMetadata
191
+ >;
192
+ }
193
+
194
+ /**
195
+ * Define (and add to this library) a {@link TreeNodeSchemaClass} for a {@link (TreeArrayNode:interface)}.
196
+ *
197
+ * @param name - Unique identifier for this schema within this factory's scope.
198
+ * @param allowedTypes - The types that may appear in the array.
199
+ * @param options - Additional options for the schema.
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * class NamedArray extends factory.array("name", factory.number) {}
204
+ * ```
205
+ */
206
+ public arrayAlpha<
207
+ const Name extends TName,
208
+ const T extends ImplicitAllowedTypes,
209
+ const TCustomMetadata = unknown,
210
+ >(
211
+ name: Name,
212
+ allowedTypes: T,
213
+ options?: NodeSchemaOptions<TCustomMetadata>,
214
+ ): TreeNodeSchemaClass<
215
+ ScopedSchemaName<TScope, Name>,
216
+ NodeKind.Array,
217
+ TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>,
218
+ Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>,
219
+ true,
220
+ T,
221
+ undefined,
222
+ TCustomMetadata
223
+ > {
224
+ return arraySchema(this.scoped2(name), allowedTypes, true, true, options?.metadata);
225
+ }
226
+
227
+ /**
228
+ * {@inheritDoc SchemaFactory.objectRecursive}
229
+ */
230
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
231
+ public override arrayRecursive<
232
+ const Name extends TName,
233
+ const T extends Unenforced<ImplicitAllowedTypes>,
234
+ const TCustomMetadata = unknown,
235
+ >(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>) {
236
+ return this.arrayAlpha(
237
+ name,
238
+ allowedTypes as T & ImplicitAllowedTypes,
239
+ options,
240
+ ) as unknown as TreeNodeSchemaClass<
241
+ ScopedSchemaName<TScope, Name>,
242
+ NodeKind.Array,
243
+ TreeArrayNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>,
244
+ {
245
+ [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
246
+ },
247
+ false,
248
+ T,
249
+ undefined,
250
+ TCustomMetadata
251
+ >;
252
+ }
253
+ }
@@ -5,7 +5,7 @@
5
5
 
6
6
  import type { ValueSchema } from "../../core/index.js";
7
7
  import type { NodeKind } from "../core/index.js";
8
- import type { FieldKind, FieldSchemaMetadata } from "../schemaTypes.js";
8
+ import type { FieldKind, FieldSchemaMetadata, NodeSchemaMetadata } from "../schemaTypes.js";
9
9
 
10
10
  /**
11
11
  * Base interface for all {@link SimpleNodeSchema} implementations.
@@ -20,6 +20,11 @@ export interface SimpleNodeSchemaBase<TNodeKind extends NodeKind> {
20
20
  * @remarks can be used to type-switch between implementations.
21
21
  */
22
22
  readonly kind: TNodeKind;
23
+
24
+ /**
25
+ * {@inheritDoc NodeSchemaMetadata}
26
+ */
27
+ readonly metadata?: NodeSchemaMetadata | undefined;
23
28
  }
24
29
 
25
30
  /**
@@ -30,7 +35,9 @@ export interface SimpleNodeSchemaBase<TNodeKind extends NodeKind> {
30
35
  */
31
36
  export interface SimpleObjectNodeSchema extends SimpleNodeSchemaBase<NodeKind.Object> {
32
37
  /**
33
- * Schemas for each of the object's fields, keyed off of schema's property keys.
38
+ * Schemas for each of the object's fields, keyed off of schema's keys.
39
+ * @remarks
40
+ * Depending on how this schema was exported, the string keys may be either the property keys or the stored keys.
34
41
  */
35
42
  readonly fields: Record<string, SimpleFieldSchema>;
36
43
  }
@@ -6,7 +6,7 @@
6
6
  import { unreachableCase } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
  import { ValueSchema } from "../../core/index.js";
9
- import { getOrCreate, hasSingle, type Mutable } from "../../util/index.js";
9
+ import { copyProperty, getOrCreate, hasSingle, type Mutable } from "../../util/index.js";
10
10
  import type {
11
11
  JsonArrayNodeSchema,
12
12
  JsonFieldSchema,
@@ -100,11 +100,15 @@ function convertArrayNodeSchema(schema: SimpleArrayNodeSchema): JsonArrayNodeSch
100
100
  ? allowedTypes[0]
101
101
  : { anyOf: allowedTypes };
102
102
 
103
- return {
103
+ const output: Mutable<JsonArrayNodeSchema> = {
104
104
  type: "array",
105
105
  _treeNodeSchemaKind: NodeKind.Array,
106
106
  items,
107
107
  };
108
+
109
+ copyProperty(schema.metadata, "description", output);
110
+
111
+ return output;
108
112
  }
109
113
 
110
114
  function convertLeafNodeSchema(schema: SimpleLeafNodeSchema): JsonLeafNodeSchema {
@@ -137,9 +141,9 @@ function convertLeafNodeSchema(schema: SimpleLeafNodeSchema): JsonLeafNodeSchema
137
141
  function convertObjectNodeSchema(schema: SimpleObjectNodeSchema): JsonObjectNodeSchema {
138
142
  const properties: Record<string, JsonFieldSchema> = {};
139
143
  const required: string[] = [];
140
- for (const [key, value] of Object.entries(schema.fields)) {
144
+ for (const [key, fieldSchema] of Object.entries(schema.fields)) {
141
145
  const allowedTypes: JsonSchemaRef[] = [];
142
- for (const allowedType of value.allowedTypes) {
146
+ for (const allowedType of fieldSchema.allowedTypes) {
143
147
  allowedTypes.push(createSchemaRef(allowedType));
144
148
  }
145
149
 
@@ -149,24 +153,25 @@ function convertObjectNodeSchema(schema: SimpleObjectNodeSchema): JsonObjectNode
149
153
  anyOf: allowedTypes,
150
154
  };
151
155
 
152
- // Don't include "description" property at all if it's not present in the input.
153
- if (value.metadata?.description !== undefined) {
154
- output.description = value.metadata.description;
155
- }
156
-
156
+ copyProperty(fieldSchema.metadata, "description", output);
157
157
  properties[key] = output;
158
158
 
159
- if (value.kind === FieldKind.Required) {
159
+ if (fieldSchema.kind === FieldKind.Required) {
160
160
  required.push(key);
161
161
  }
162
162
  }
163
- return {
163
+
164
+ const transformedNode: Mutable<JsonObjectNodeSchema> = {
164
165
  type: "object",
165
166
  _treeNodeSchemaKind: NodeKind.Object,
166
167
  properties,
167
168
  required,
168
169
  additionalProperties: false,
169
170
  };
171
+
172
+ copyProperty(schema.metadata, "description", transformedNode);
173
+
174
+ return transformedNode;
170
175
  }
171
176
 
172
177
  function convertMapNodeSchema(schema: SimpleMapNodeSchema): JsonMapNodeSchema {
@@ -174,7 +179,8 @@ function convertMapNodeSchema(schema: SimpleMapNodeSchema): JsonMapNodeSchema {
174
179
  schema.allowedTypes.forEach((type) => {
175
180
  allowedTypes.push(createSchemaRef(type));
176
181
  });
177
- return {
182
+
183
+ const output: Mutable<JsonMapNodeSchema> = {
178
184
  type: "object",
179
185
  _treeNodeSchemaKind: NodeKind.Map,
180
186
  patternProperties: {
@@ -185,6 +191,10 @@ function convertMapNodeSchema(schema: SimpleMapNodeSchema): JsonMapNodeSchema {
185
191
  },
186
192
  },
187
193
  };
194
+
195
+ copyProperty(schema.metadata, "description", output);
196
+
197
+ return output;
188
198
  }
189
199
 
190
200
  function createSchemaRef(schemaId: string): JsonSchemaRef {