@fluidframework/tree 2.51.0 → 2.53.0-350190

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 (730) hide show
  1. package/.vscode/settings.json +0 -1
  2. package/CHANGELOG.md +43 -0
  3. package/api-report/tree.alpha.api.md +40 -30
  4. package/dist/alpha.d.ts +2 -1
  5. package/dist/codec/codec.d.ts +2 -1
  6. package/dist/codec/codec.d.ts.map +1 -1
  7. package/dist/codec/codec.js +4 -3
  8. package/dist/codec/codec.js.map +1 -1
  9. package/dist/core/index.d.ts +1 -1
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +3 -2
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/rebase/index.d.ts +1 -1
  14. package/dist/core/rebase/index.d.ts.map +1 -1
  15. package/dist/core/rebase/index.js +2 -1
  16. package/dist/core/rebase/index.js.map +1 -1
  17. package/dist/core/rebase/types.d.ts +3 -1
  18. package/dist/core/rebase/types.d.ts.map +1 -1
  19. package/dist/core/rebase/types.js +2 -1
  20. package/dist/core/rebase/types.js.map +1 -1
  21. package/dist/core/schema-stored/schema.d.ts +1 -23
  22. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  23. package/dist/core/schema-stored/schema.js +2 -2
  24. package/dist/core/schema-stored/schema.js.map +1 -1
  25. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  26. package/dist/core/tree/detachedFieldIndex.js +2 -3
  27. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  28. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  29. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  30. package/dist/core/tree/detachedFieldIndexCodecCommon.js +68 -0
  31. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  32. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  33. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  34. package/dist/core/tree/detachedFieldIndexCodecV1.js +55 -0
  35. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  36. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  37. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  38. package/dist/core/tree/detachedFieldIndexCodecV2.js +49 -0
  39. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  40. package/dist/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  41. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  42. package/dist/core/tree/detachedFieldIndexCodecs.js +26 -0
  43. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  44. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  45. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  46. package/dist/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +18 -13
  47. package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  48. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  49. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  50. package/dist/core/tree/detachedFieldIndexFormatV1.js +12 -0
  51. package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  52. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  53. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  54. package/dist/core/tree/detachedFieldIndexFormatV2.js +14 -0
  55. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  56. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  57. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  58. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +21 -21
  59. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  61. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  62. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  63. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  64. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  65. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  66. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +74 -61
  67. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  68. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  69. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  70. package/dist/feature-libraries/chunked-forest/codec/format.js +18 -12
  71. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  72. package/{lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts → dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  73. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  74. package/dist/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +23 -17
  75. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  76. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  77. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  78. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -22
  79. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  80. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  81. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  82. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  83. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  84. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +15 -2
  85. package/dist/feature-libraries/default-schema/defaultFieldKinds.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 +0 -2
  88. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  89. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  90. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  91. package/dist/feature-libraries/default-schema/index.js +2 -2
  92. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  93. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  94. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  95. package/dist/feature-libraries/default-schema/schemaChecker.js +31 -26
  96. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  97. package/dist/feature-libraries/index.d.ts +1 -2
  98. package/dist/feature-libraries/index.d.ts.map +1 -1
  99. package/dist/feature-libraries/index.js +2 -4
  100. package/dist/feature-libraries/index.js.map +1 -1
  101. package/dist/feature-libraries/modular-schema/comparison.d.ts +5 -6
  102. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  103. package/dist/feature-libraries/modular-schema/comparison.js +15 -16
  104. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  105. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
  106. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  107. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
  108. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  109. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  110. package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -0
  111. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
  113. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  114. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +49 -20
  115. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  116. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  117. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  118. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  119. package/dist/feature-libraries/object-forest/objectForest.js +2 -3
  120. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  121. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  122. package/dist/feature-libraries/optional-field/optionalField.js +3 -0
  123. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  124. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
  125. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
  126. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
  127. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
  128. package/dist/index.d.ts +1 -1
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +6 -2
  131. package/dist/index.js.map +1 -1
  132. package/dist/jsonDomainSchema.d.ts +5 -3
  133. package/dist/jsonDomainSchema.d.ts.map +1 -1
  134. package/dist/jsonDomainSchema.js.map +1 -1
  135. package/dist/packageVersion.d.ts +1 -1
  136. package/dist/packageVersion.d.ts.map +1 -1
  137. package/dist/packageVersion.js +1 -1
  138. package/dist/packageVersion.js.map +1 -1
  139. package/dist/shared-tree/independentView.d.ts +8 -0
  140. package/dist/shared-tree/independentView.d.ts.map +1 -1
  141. package/dist/shared-tree/independentView.js +23 -11
  142. package/dist/shared-tree/independentView.js.map +1 -1
  143. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  144. package/dist/shared-tree/schematizeTree.js +1 -1
  145. package/dist/shared-tree/schematizeTree.js.map +1 -1
  146. package/dist/shared-tree/schematizingTreeView.d.ts +0 -1
  147. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  148. package/dist/shared-tree/schematizingTreeView.js +9 -12
  149. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  150. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  151. package/dist/shared-tree/sharedTree.js +1 -29
  152. package/dist/shared-tree/sharedTree.js.map +1 -1
  153. package/dist/shared-tree/treeAlpha.d.ts +20 -6
  154. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  155. package/dist/shared-tree/treeAlpha.js +18 -7
  156. package/dist/shared-tree/treeAlpha.js.map +1 -1
  157. package/dist/shared-tree/treeCheckout.d.ts +2 -1
  158. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  159. package/dist/shared-tree/treeCheckout.js +32 -0
  160. package/dist/shared-tree/treeCheckout.js.map +1 -1
  161. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  162. package/dist/shared-tree-core/branch.js +1 -1
  163. package/dist/shared-tree-core/branch.js.map +1 -1
  164. package/dist/simple-tree/api/conciseTree.d.ts +2 -2
  165. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  166. package/dist/simple-tree/api/conciseTree.js +6 -6
  167. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  168. package/dist/simple-tree/api/configuration.d.ts +11 -2
  169. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  170. package/dist/simple-tree/api/configuration.js +5 -1
  171. package/dist/simple-tree/api/configuration.js.map +1 -1
  172. package/dist/simple-tree/api/create.d.ts +8 -7
  173. package/dist/simple-tree/api/create.d.ts.map +1 -1
  174. package/dist/simple-tree/api/create.js +33 -23
  175. package/dist/simple-tree/api/create.js.map +1 -1
  176. package/dist/simple-tree/api/customTree.d.ts +25 -4
  177. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  178. package/dist/simple-tree/api/customTree.js +42 -16
  179. package/dist/simple-tree/api/customTree.js.map +1 -1
  180. package/dist/simple-tree/api/discrepancies.d.ts +94 -0
  181. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
  182. package/dist/simple-tree/api/discrepancies.js +256 -0
  183. package/dist/simple-tree/api/discrepancies.js.map +1 -0
  184. package/dist/simple-tree/api/index.d.ts +3 -2
  185. package/dist/simple-tree/api/index.d.ts.map +1 -1
  186. package/dist/simple-tree/api/index.js +3 -2
  187. package/dist/simple-tree/api/index.js.map +1 -1
  188. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  189. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  190. package/dist/simple-tree/api/schemaCompatibilityTester.js +17 -117
  191. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  192. package/dist/simple-tree/api/schemaFactory.d.ts +16 -159
  193. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  194. package/dist/simple-tree/api/schemaFactory.js +4 -47
  195. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  196. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
  197. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  198. package/dist/simple-tree/api/schemaFactoryAlpha.js +33 -11
  199. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  200. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
  201. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  202. package/dist/simple-tree/api/schemaFactoryRecursive.js +1 -7
  203. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  204. package/dist/simple-tree/api/schemaStatics.d.ts +158 -0
  205. package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -0
  206. package/dist/simple-tree/api/schemaStatics.js +59 -0
  207. package/dist/simple-tree/api/schemaStatics.js.map +1 -0
  208. package/dist/simple-tree/api/storedSchema.d.ts +5 -3
  209. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  210. package/dist/simple-tree/api/storedSchema.js +9 -3
  211. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  212. package/dist/simple-tree/api/treeBeta.d.ts +2 -2
  213. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  214. package/dist/simple-tree/api/treeBeta.js +16 -4
  215. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  216. package/dist/simple-tree/api/verboseTree.d.ts +2 -2
  217. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  218. package/dist/simple-tree/api/verboseTree.js +15 -15
  219. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  220. package/dist/simple-tree/core/allowedTypes.d.ts +43 -11
  221. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  222. package/dist/simple-tree/core/allowedTypes.js +51 -11
  223. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  224. package/dist/simple-tree/core/context.d.ts +13 -2
  225. package/dist/simple-tree/core/context.d.ts.map +1 -1
  226. package/dist/simple-tree/core/context.js +22 -9
  227. package/dist/simple-tree/core/context.js.map +1 -1
  228. package/dist/simple-tree/core/index.d.ts +6 -4
  229. package/dist/simple-tree/core/index.d.ts.map +1 -1
  230. package/dist/simple-tree/core/index.js +8 -1
  231. package/dist/simple-tree/core/index.js.map +1 -1
  232. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
  233. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
  234. package/dist/simple-tree/core/simpleNodeSchemaBase.js +7 -0
  235. package/dist/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
  236. package/dist/simple-tree/core/toStored.d.ts +32 -0
  237. package/dist/simple-tree/core/toStored.d.ts.map +1 -0
  238. package/dist/simple-tree/core/toStored.js +37 -0
  239. package/dist/simple-tree/core/toStored.js.map +1 -0
  240. package/dist/simple-tree/core/treeNodeKernel.d.ts +1 -1
  241. package/dist/simple-tree/core/treeNodeKernel.js +1 -1
  242. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  243. package/dist/simple-tree/core/treeNodeSchema.d.ts +7 -2
  244. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  245. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  246. package/dist/simple-tree/core/treeNodeValid.d.ts +7 -2
  247. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  248. package/dist/simple-tree/core/treeNodeValid.js +19 -4
  249. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  250. package/dist/simple-tree/core/walkSchema.d.ts +22 -5
  251. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  252. package/dist/simple-tree/core/walkSchema.js +6 -2
  253. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  254. package/dist/simple-tree/createContext.d.ts +2 -0
  255. package/dist/simple-tree/createContext.d.ts.map +1 -1
  256. package/dist/simple-tree/createContext.js +4 -2
  257. package/dist/simple-tree/createContext.js.map +1 -1
  258. package/dist/simple-tree/fieldSchema.d.ts +1 -0
  259. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  260. package/dist/simple-tree/fieldSchema.js +2 -1
  261. package/dist/simple-tree/fieldSchema.js.map +1 -1
  262. package/dist/simple-tree/index.d.ts +7 -7
  263. package/dist/simple-tree/index.d.ts.map +1 -1
  264. package/dist/simple-tree/index.js +13 -8
  265. package/dist/simple-tree/index.js.map +1 -1
  266. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  267. package/dist/simple-tree/leafNodeSchema.js +1 -0
  268. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  269. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  270. package/dist/simple-tree/node-kinds/array/arrayNode.js +18 -4
  271. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  272. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  273. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  274. package/dist/simple-tree/node-kinds/index.js +1 -2
  275. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  276. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  277. package/dist/simple-tree/node-kinds/map/mapNode.js +9 -2
  278. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  279. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  280. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  281. package/dist/simple-tree/node-kinds/object/index.js +1 -2
  282. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  283. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +3 -8
  284. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  285. package/dist/simple-tree/node-kinds/object/objectNode.js +41 -44
  286. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  287. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  288. package/dist/simple-tree/node-kinds/record/recordNode.js +9 -2
  289. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  290. package/dist/simple-tree/prepareForInsertion.d.ts +6 -6
  291. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  292. package/dist/simple-tree/prepareForInsertion.js +19 -13
  293. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  294. package/dist/simple-tree/simpleSchema.d.ts +6 -21
  295. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  296. package/dist/simple-tree/simpleSchema.js.map +1 -1
  297. package/dist/simple-tree/toStoredSchema.d.ts +38 -11
  298. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  299. package/dist/simple-tree/toStoredSchema.js +71 -33
  300. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  301. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  302. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  303. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  304. package/dist/simple-tree/walkFieldSchema.d.ts +1 -0
  305. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
  306. package/dist/simple-tree/walkFieldSchema.js +1 -0
  307. package/dist/simple-tree/walkFieldSchema.js.map +1 -1
  308. package/lib/alpha.d.ts +2 -1
  309. package/lib/codec/codec.d.ts +2 -1
  310. package/lib/codec/codec.d.ts.map +1 -1
  311. package/lib/codec/codec.js +4 -3
  312. package/lib/codec/codec.js.map +1 -1
  313. package/lib/core/index.d.ts +1 -1
  314. package/lib/core/index.d.ts.map +1 -1
  315. package/lib/core/index.js +1 -1
  316. package/lib/core/index.js.map +1 -1
  317. package/lib/core/rebase/index.d.ts +1 -1
  318. package/lib/core/rebase/index.d.ts.map +1 -1
  319. package/lib/core/rebase/index.js +1 -1
  320. package/lib/core/rebase/index.js.map +1 -1
  321. package/lib/core/rebase/types.d.ts +3 -1
  322. package/lib/core/rebase/types.d.ts.map +1 -1
  323. package/lib/core/rebase/types.js +1 -0
  324. package/lib/core/rebase/types.js.map +1 -1
  325. package/lib/core/schema-stored/schema.d.ts +1 -23
  326. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  327. package/lib/core/schema-stored/schema.js +2 -2
  328. package/lib/core/schema-stored/schema.js.map +1 -1
  329. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  330. package/lib/core/tree/detachedFieldIndex.js +2 -3
  331. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  332. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  333. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  334. package/lib/core/tree/detachedFieldIndexCodecCommon.js +64 -0
  335. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  336. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  337. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  338. package/lib/core/tree/detachedFieldIndexCodecV1.js +51 -0
  339. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  340. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  341. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  342. package/lib/core/tree/detachedFieldIndexCodecV2.js +45 -0
  343. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  344. package/lib/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  345. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  346. package/lib/core/tree/detachedFieldIndexCodecs.js +21 -0
  347. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  348. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  349. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  350. package/lib/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +13 -10
  351. package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  352. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  353. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  354. package/lib/core/tree/detachedFieldIndexFormatV1.js +9 -0
  355. package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  356. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  357. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  358. package/lib/core/tree/detachedFieldIndexFormatV2.js +11 -0
  359. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  360. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  361. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  362. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +19 -19
  363. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  364. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  365. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  366. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  367. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  368. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  369. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  370. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +70 -57
  371. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  372. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  373. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  374. package/lib/feature-libraries/chunked-forest/codec/format.js +17 -11
  375. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  376. package/{dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts → lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  377. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  378. package/lib/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +21 -15
  379. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  380. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  381. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  382. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +19 -19
  383. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  384. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  385. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  386. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  387. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  388. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +15 -2
  389. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  390. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  391. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -2
  392. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  393. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  394. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  395. package/lib/feature-libraries/default-schema/index.js +1 -1
  396. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  397. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  398. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  399. package/lib/feature-libraries/default-schema/schemaChecker.js +29 -24
  400. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  401. package/lib/feature-libraries/index.d.ts +1 -2
  402. package/lib/feature-libraries/index.d.ts.map +1 -1
  403. package/lib/feature-libraries/index.js +1 -2
  404. package/lib/feature-libraries/index.js.map +1 -1
  405. package/lib/feature-libraries/modular-schema/comparison.d.ts +5 -6
  406. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  407. package/lib/feature-libraries/modular-schema/comparison.js +14 -14
  408. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  409. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
  410. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  411. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
  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 +1 -0
  415. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  416. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
  417. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  418. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +50 -21
  419. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  420. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  421. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  422. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  423. package/lib/feature-libraries/object-forest/objectForest.js +3 -4
  424. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  425. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  426. package/lib/feature-libraries/optional-field/optionalField.js +3 -0
  427. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  428. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
  429. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
  430. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
  431. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
  432. package/lib/index.d.ts +1 -1
  433. package/lib/index.d.ts.map +1 -1
  434. package/lib/index.js +2 -2
  435. package/lib/index.js.map +1 -1
  436. package/lib/jsonDomainSchema.d.ts +5 -3
  437. package/lib/jsonDomainSchema.d.ts.map +1 -1
  438. package/lib/jsonDomainSchema.js.map +1 -1
  439. package/lib/packageVersion.d.ts +1 -1
  440. package/lib/packageVersion.d.ts.map +1 -1
  441. package/lib/packageVersion.js +1 -1
  442. package/lib/packageVersion.js.map +1 -1
  443. package/lib/shared-tree/independentView.d.ts +8 -0
  444. package/lib/shared-tree/independentView.d.ts.map +1 -1
  445. package/lib/shared-tree/independentView.js +21 -10
  446. package/lib/shared-tree/independentView.js.map +1 -1
  447. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  448. package/lib/shared-tree/schematizeTree.js +2 -2
  449. package/lib/shared-tree/schematizeTree.js.map +1 -1
  450. package/lib/shared-tree/schematizingTreeView.d.ts +0 -1
  451. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  452. package/lib/shared-tree/schematizingTreeView.js +10 -13
  453. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  454. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  455. package/lib/shared-tree/sharedTree.js +2 -30
  456. package/lib/shared-tree/sharedTree.js.map +1 -1
  457. package/lib/shared-tree/treeAlpha.d.ts +20 -6
  458. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  459. package/lib/shared-tree/treeAlpha.js +19 -8
  460. package/lib/shared-tree/treeAlpha.js.map +1 -1
  461. package/lib/shared-tree/treeCheckout.d.ts +2 -1
  462. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  463. package/lib/shared-tree/treeCheckout.js +33 -1
  464. package/lib/shared-tree/treeCheckout.js.map +1 -1
  465. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  466. package/lib/shared-tree-core/branch.js +1 -1
  467. package/lib/shared-tree-core/branch.js.map +1 -1
  468. package/lib/simple-tree/api/conciseTree.d.ts +2 -2
  469. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  470. package/lib/simple-tree/api/conciseTree.js +6 -6
  471. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  472. package/lib/simple-tree/api/configuration.d.ts +11 -2
  473. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  474. package/lib/simple-tree/api/configuration.js +6 -2
  475. package/lib/simple-tree/api/configuration.js.map +1 -1
  476. package/lib/simple-tree/api/create.d.ts +8 -7
  477. package/lib/simple-tree/api/create.d.ts.map +1 -1
  478. package/lib/simple-tree/api/create.js +35 -25
  479. package/lib/simple-tree/api/create.js.map +1 -1
  480. package/lib/simple-tree/api/customTree.d.ts +25 -4
  481. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  482. package/lib/simple-tree/api/customTree.js +43 -17
  483. package/lib/simple-tree/api/customTree.js.map +1 -1
  484. package/lib/simple-tree/api/discrepancies.d.ts +94 -0
  485. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
  486. package/lib/simple-tree/api/discrepancies.js +251 -0
  487. package/lib/simple-tree/api/discrepancies.js.map +1 -0
  488. package/lib/simple-tree/api/index.d.ts +3 -2
  489. package/lib/simple-tree/api/index.d.ts.map +1 -1
  490. package/lib/simple-tree/api/index.js +2 -1
  491. package/lib/simple-tree/api/index.js.map +1 -1
  492. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  493. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  494. package/lib/simple-tree/api/schemaCompatibilityTester.js +19 -119
  495. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  496. package/lib/simple-tree/api/schemaFactory.d.ts +16 -159
  497. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  498. package/lib/simple-tree/api/schemaFactory.js +2 -45
  499. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  500. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
  501. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  502. package/lib/simple-tree/api/schemaFactoryAlpha.js +23 -1
  503. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  504. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
  505. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  506. package/lib/simple-tree/api/schemaFactoryRecursive.js +0 -5
  507. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  508. package/lib/simple-tree/api/schemaStatics.d.ts +158 -0
  509. package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -0
  510. package/lib/simple-tree/api/schemaStatics.js +56 -0
  511. package/lib/simple-tree/api/schemaStatics.js.map +1 -0
  512. package/lib/simple-tree/api/storedSchema.d.ts +5 -3
  513. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  514. package/lib/simple-tree/api/storedSchema.js +12 -6
  515. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  516. package/lib/simple-tree/api/treeBeta.d.ts +2 -2
  517. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  518. package/lib/simple-tree/api/treeBeta.js +14 -2
  519. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  520. package/lib/simple-tree/api/verboseTree.d.ts +2 -2
  521. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  522. package/lib/simple-tree/api/verboseTree.js +9 -9
  523. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  524. package/lib/simple-tree/core/allowedTypes.d.ts +43 -11
  525. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  526. package/lib/simple-tree/core/allowedTypes.js +52 -11
  527. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  528. package/lib/simple-tree/core/context.d.ts +13 -2
  529. package/lib/simple-tree/core/context.d.ts.map +1 -1
  530. package/lib/simple-tree/core/context.js +22 -9
  531. package/lib/simple-tree/core/context.js.map +1 -1
  532. package/lib/simple-tree/core/index.d.ts +6 -4
  533. package/lib/simple-tree/core/index.d.ts.map +1 -1
  534. package/lib/simple-tree/core/index.js +4 -3
  535. package/lib/simple-tree/core/index.js.map +1 -1
  536. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
  537. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
  538. package/lib/simple-tree/core/simpleNodeSchemaBase.js +6 -0
  539. package/lib/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
  540. package/lib/simple-tree/core/toStored.d.ts +32 -0
  541. package/lib/simple-tree/core/toStored.d.ts.map +1 -0
  542. package/lib/simple-tree/core/toStored.js +32 -0
  543. package/lib/simple-tree/core/toStored.js.map +1 -0
  544. package/lib/simple-tree/core/treeNodeKernel.d.ts +1 -1
  545. package/lib/simple-tree/core/treeNodeKernel.js +1 -1
  546. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  547. package/lib/simple-tree/core/treeNodeSchema.d.ts +7 -2
  548. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  549. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  550. package/lib/simple-tree/core/treeNodeValid.d.ts +7 -2
  551. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  552. package/lib/simple-tree/core/treeNodeValid.js +17 -3
  553. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  554. package/lib/simple-tree/core/walkSchema.d.ts +22 -5
  555. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  556. package/lib/simple-tree/core/walkSchema.js +6 -2
  557. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  558. package/lib/simple-tree/createContext.d.ts +2 -0
  559. package/lib/simple-tree/createContext.d.ts.map +1 -1
  560. package/lib/simple-tree/createContext.js +5 -3
  561. package/lib/simple-tree/createContext.js.map +1 -1
  562. package/lib/simple-tree/fieldSchema.d.ts +1 -0
  563. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  564. package/lib/simple-tree/fieldSchema.js +2 -1
  565. package/lib/simple-tree/fieldSchema.js.map +1 -1
  566. package/lib/simple-tree/index.d.ts +7 -7
  567. package/lib/simple-tree/index.d.ts.map +1 -1
  568. package/lib/simple-tree/index.js +5 -5
  569. package/lib/simple-tree/index.js.map +1 -1
  570. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  571. package/lib/simple-tree/leafNodeSchema.js +2 -1
  572. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  573. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  574. package/lib/simple-tree/node-kinds/array/arrayNode.js +21 -7
  575. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  576. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  577. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  578. package/lib/simple-tree/node-kinds/index.js +1 -1
  579. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  580. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  581. package/lib/simple-tree/node-kinds/map/mapNode.js +12 -5
  582. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  583. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  584. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  585. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  586. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  587. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +3 -8
  588. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  589. package/lib/simple-tree/node-kinds/object/objectNode.js +19 -21
  590. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  591. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  592. package/lib/simple-tree/node-kinds/record/recordNode.js +12 -5
  593. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  594. package/lib/simple-tree/prepareForInsertion.d.ts +6 -6
  595. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  596. package/lib/simple-tree/prepareForInsertion.js +21 -15
  597. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  598. package/lib/simple-tree/simpleSchema.d.ts +6 -21
  599. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  600. package/lib/simple-tree/simpleSchema.js.map +1 -1
  601. package/lib/simple-tree/toStoredSchema.d.ts +38 -11
  602. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  603. package/lib/simple-tree/toStoredSchema.js +70 -34
  604. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  605. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  606. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  607. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
  608. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  609. package/lib/simple-tree/walkFieldSchema.d.ts +1 -0
  610. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
  611. package/lib/simple-tree/walkFieldSchema.js +1 -0
  612. package/lib/simple-tree/walkFieldSchema.js.map +1 -1
  613. package/package.json +23 -23
  614. package/src/codec/codec.ts +4 -3
  615. package/src/core/index.ts +2 -0
  616. package/src/core/rebase/index.ts +2 -0
  617. package/src/core/rebase/types.ts +4 -0
  618. package/src/core/schema-stored/schema.ts +2 -26
  619. package/src/core/tree/detachedFieldIndex.ts +4 -6
  620. package/src/core/tree/detachedFieldIndexCodecCommon.ts +87 -0
  621. package/src/core/tree/{detachedFieldIndexCodec.ts → detachedFieldIndexCodecV1.ts} +22 -68
  622. package/src/core/tree/detachedFieldIndexCodecV2.ts +72 -0
  623. package/src/core/tree/detachedFieldIndexCodecs.ts +44 -0
  624. package/src/core/tree/{detachedFieldIndexFormat.ts → detachedFieldIndexFormatCommon.ts} +32 -23
  625. package/src/core/tree/detachedFieldIndexFormatV1.ts +15 -0
  626. package/src/core/tree/detachedFieldIndexFormatV2.ts +17 -0
  627. package/src/feature-libraries/chunked-forest/codec/README.md +1 -1
  628. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +25 -25
  629. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -6
  630. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +96 -73
  631. package/src/feature-libraries/chunked-forest/codec/format.ts +20 -14
  632. package/src/feature-libraries/chunked-forest/codec/{nodeShape.ts → nodeEncoder.ts} +23 -17
  633. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +34 -34
  634. package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +5 -5
  635. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +11 -0
  636. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -2
  637. package/src/feature-libraries/default-schema/index.ts +1 -1
  638. package/src/feature-libraries/default-schema/schemaChecker.ts +47 -30
  639. package/src/feature-libraries/index.ts +1 -3
  640. package/src/feature-libraries/modular-schema/comparison.ts +14 -29
  641. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +9 -0
  642. package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -0
  643. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +61 -19
  644. package/src/feature-libraries/object-forest/objectForest.ts +10 -6
  645. package/src/feature-libraries/optional-field/optionalField.ts +4 -0
  646. package/src/feature-libraries/sequence-field/sequenceFieldChangeRebaser.ts +4 -0
  647. package/src/index.ts +7 -1
  648. package/src/jsonDomainSchema.ts +4 -0
  649. package/src/packageVersion.ts +1 -1
  650. package/src/shared-tree/independentView.ts +45 -19
  651. package/src/shared-tree/schematizeTree.ts +2 -2
  652. package/src/shared-tree/schematizingTreeView.ts +24 -15
  653. package/src/shared-tree/sharedTree.ts +2 -42
  654. package/src/shared-tree/treeAlpha.ts +48 -22
  655. package/src/shared-tree/treeCheckout.ts +54 -10
  656. package/src/shared-tree-core/branch.ts +1 -6
  657. package/src/simple-tree/api/conciseTree.ts +9 -7
  658. package/src/simple-tree/api/configuration.ts +18 -4
  659. package/src/simple-tree/api/create.ts +44 -36
  660. package/src/simple-tree/api/customTree.ts +59 -20
  661. package/src/simple-tree/api/discrepancies.ts +474 -0
  662. package/src/simple-tree/api/index.ts +2 -3
  663. package/src/simple-tree/api/schemaCompatibilityTester.ts +23 -151
  664. package/src/simple-tree/api/schemaFactory.ts +13 -254
  665. package/src/simple-tree/api/schemaFactoryAlpha.ts +174 -1
  666. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -25
  667. package/src/simple-tree/api/schemaStatics.ts +291 -0
  668. package/src/simple-tree/api/storedSchema.ts +18 -14
  669. package/src/simple-tree/api/treeBeta.ts +24 -4
  670. package/src/simple-tree/api/verboseTree.ts +17 -8
  671. package/src/simple-tree/core/allowedTypes.ts +87 -34
  672. package/src/simple-tree/core/context.ts +24 -22
  673. package/src/simple-tree/core/index.ts +11 -2
  674. package/src/simple-tree/core/simpleNodeSchemaBase.ts +30 -0
  675. package/src/simple-tree/core/toStored.ts +58 -0
  676. package/src/simple-tree/core/treeNodeKernel.ts +1 -1
  677. package/src/simple-tree/core/treeNodeSchema.ts +8 -2
  678. package/src/simple-tree/core/treeNodeValid.ts +23 -4
  679. package/src/simple-tree/core/walkSchema.ts +26 -6
  680. package/src/simple-tree/createContext.ts +11 -3
  681. package/src/simple-tree/fieldSchema.ts +3 -1
  682. package/src/simple-tree/index.ts +19 -13
  683. package/src/simple-tree/leafNodeSchema.ts +2 -1
  684. package/src/simple-tree/node-kinds/array/arrayNode.ts +64 -23
  685. package/src/simple-tree/node-kinds/index.ts +0 -1
  686. package/src/simple-tree/node-kinds/map/mapNode.ts +23 -2
  687. package/src/simple-tree/node-kinds/object/index.ts +0 -1
  688. package/src/simple-tree/node-kinds/object/objectNode.ts +42 -30
  689. package/src/simple-tree/node-kinds/record/recordNode.ts +20 -2
  690. package/src/simple-tree/prepareForInsertion.ts +28 -15
  691. package/src/simple-tree/simpleSchema.ts +6 -26
  692. package/src/simple-tree/toStoredSchema.ts +110 -44
  693. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +6 -2
  694. package/src/simple-tree/walkFieldSchema.ts +1 -0
  695. package/dist/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  696. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  697. package/dist/core/tree/detachedFieldIndexCodec.js +0 -100
  698. package/dist/core/tree/detachedFieldIndexCodec.js.map +0 -1
  699. package/dist/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  700. package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  701. package/dist/core/tree/detachedFieldIndexFormat.js.map +0 -1
  702. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  703. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  704. package/dist/feature-libraries/initializeForest.d.ts +0 -18
  705. package/dist/feature-libraries/initializeForest.d.ts.map +0 -1
  706. package/dist/feature-libraries/initializeForest.js +0 -35
  707. package/dist/feature-libraries/initializeForest.js.map +0 -1
  708. package/dist/simple-tree/discrepancies.d.ts +0 -167
  709. package/dist/simple-tree/discrepancies.d.ts.map +0 -1
  710. package/dist/simple-tree/discrepancies.js +0 -382
  711. package/dist/simple-tree/discrepancies.js.map +0 -1
  712. package/lib/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  713. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  714. package/lib/core/tree/detachedFieldIndexCodec.js +0 -96
  715. package/lib/core/tree/detachedFieldIndexCodec.js.map +0 -1
  716. package/lib/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  717. package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  718. package/lib/core/tree/detachedFieldIndexFormat.js.map +0 -1
  719. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  720. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  721. package/lib/feature-libraries/initializeForest.d.ts +0 -18
  722. package/lib/feature-libraries/initializeForest.d.ts.map +0 -1
  723. package/lib/feature-libraries/initializeForest.js +0 -31
  724. package/lib/feature-libraries/initializeForest.js.map +0 -1
  725. package/lib/simple-tree/discrepancies.d.ts +0 -167
  726. package/lib/simple-tree/discrepancies.d.ts.map +0 -1
  727. package/lib/simple-tree/discrepancies.js +0 -376
  728. package/lib/simple-tree/discrepancies.js.map +0 -1
  729. package/src/feature-libraries/initializeForest.ts +0 -55
  730. package/src/simple-tree/discrepancies.ts +0 -648
@@ -5,7 +5,12 @@
5
5
 
6
6
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
7
7
 
8
- import { getOrCreate, isReadonlyArray, type IsUnion } from "../../util/index.js";
8
+ import {
9
+ getOrCreate,
10
+ isReadonlyArray,
11
+ type IsUnion,
12
+ type MakeNominal,
13
+ } from "../../util/index.js";
9
14
  import { isLazy, type FlexListToUnion, type LazyItem } from "./flexList.js";
10
15
  import {
11
16
  NodeKind,
@@ -76,6 +81,7 @@ export interface NormalizedAnnotatedAllowedTypes {
76
81
  export function isAnnotatedAllowedTypes(
77
82
  allowedTypes: ImplicitAnnotatedAllowedTypes,
78
83
  ): allowedTypes is AnnotatedAllowedTypes {
84
+ checkForUninitializedSchema(allowedTypes);
79
85
  return (
80
86
  // Class based schema, and lazy schema references report type "function": filtering them out with typeof makes narrowing based on members mostly safe
81
87
  typeof allowedTypes === "object" && "metadata" in allowedTypes && "types" in allowedTypes
@@ -116,7 +122,9 @@ export interface AllowedTypesMetadata {
116
122
  export function isAnnotatedAllowedType(
117
123
  allowedType: AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
118
124
  ): allowedType is AnnotatedAllowedType {
119
- return "metadata" in allowedType && "type" in allowedType;
125
+ checkForUninitializedSchema(allowedType);
126
+ // Class based schema, and lazy schema references report type "function": filtering them out with typeof makes narrowing based on members mostly safe
127
+ return typeof allowedType === "object" && "metadata" in allowedType && "type" in allowedType;
120
128
  }
121
129
 
122
130
  /**
@@ -131,7 +139,34 @@ export interface AllowedTypeMetadata {
131
139
  */
132
140
  readonly custom?: unknown;
133
141
 
134
- // TODO metadata for enablable types will be added here
142
+ /**
143
+ * If defined, indicates that an allowed type is {@link SchemaStaticsAlpha.staged | staged}.
144
+ */
145
+ readonly stagedSchemaUpgrade?: SchemaUpgrade;
146
+ }
147
+
148
+ /**
149
+ * Package internal {@link SchemaUpgrade} construction API.
150
+ */
151
+ export let createSchemaUpgrade: () => SchemaUpgrade;
152
+
153
+ /**
154
+ * Unique token used to upgrade schemas and determine if a particular upgrade has been completed.
155
+ * @remarks
156
+ * Create using {@link SchemaStaticsAlpha.staged}.
157
+ * @privateRemarks
158
+ * TODO:#38722 implement runtime schema upgrades.
159
+ * Until then, the class purely behaves mostly as a placeholder.
160
+ * TODO: Consider allowing users to store a name for the upgrade to use in error messages.
161
+ * @sealed @alpha
162
+ */
163
+ export class SchemaUpgrade {
164
+ protected _typeCheck!: MakeNominal;
165
+ static {
166
+ createSchemaUpgrade = () => new SchemaUpgrade();
167
+ }
168
+
169
+ private constructor() {}
135
170
  }
136
171
 
137
172
  /**
@@ -188,7 +223,7 @@ export type UnannotateImplicitAllowedTypes<T extends ImplicitAnnotatedAllowedTyp
188
223
  T extends AnnotatedAllowedTypes
189
224
  ? UnannotateAllowedTypes<T>
190
225
  : T extends AnnotatedAllowedType
191
- ? UnannotateAllowedType<T>
226
+ ? UnannotateAllowedTypesList<[T]>
192
227
  : T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]
193
228
  ? UnannotateAllowedTypesList<T>
194
229
  : T extends TreeNodeSchema
@@ -202,17 +237,9 @@ export type UnannotateImplicitAllowedTypes<T extends ImplicitAnnotatedAllowedTyp
202
237
  export type UnannotateAllowedTypesList<
203
238
  T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[],
204
239
  > = {
205
- [I in keyof T]: UnannotateAllowedTypeOrLazyItem<T[I]>;
240
+ [I in keyof T]: UnannotateAllowedType<T[I]>;
206
241
  };
207
242
 
208
- /**
209
- * Removes annotations from an allowed type that may contain annotations.
210
- * @system @alpha
211
- */
212
- export type UnannotateAllowedTypeOrLazyItem<
213
- T extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
214
- > = T extends AnnotatedAllowedType<infer X> ? X : T;
215
-
216
243
  /**
217
244
  * Removes all annotations from a set of allowed types.
218
245
  * @system @alpha
@@ -222,10 +249,15 @@ export type UnannotateAllowedTypes<T extends AnnotatedAllowedTypes> =
222
249
 
223
250
  /**
224
251
  * Removes annotations from an allowed type.
252
+ * @remarks
253
+ * If the input could be lazy
254
+ * (is a LazyItem or AnnotatedAllowedType<LazyItem> instead of just a TreeNodeSchema | AnnotatedAllowedType<TreeNodeSchema>)
255
+ * then the output of this will be a LazyItem and thus is not valid as an ImplicitAllowedTypes without wrapping it in an array.
256
+ * This can however be used on items within an AllowedTypes array.
225
257
  * @system @alpha
226
258
  */
227
- export type UnannotateAllowedType<T extends AnnotatedAllowedType> =
228
- T extends AnnotatedAllowedType<infer X> ? [X] : T;
259
+ export type UnannotateAllowedType<T extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>> =
260
+ T extends AnnotatedAllowedType<infer X> ? X : T;
229
261
 
230
262
  /**
231
263
  * Normalizes a {@link ImplicitAllowedTypes} to a set of {@link TreeNodeSchema}s, by eagerly evaluating any
@@ -237,17 +269,19 @@ export type UnannotateAllowedType<T extends AnnotatedAllowedType> =
237
269
  * @internal
238
270
  */
239
271
  export function normalizeAllowedTypes(
240
- types: ImplicitAllowedTypes,
272
+ types: ImplicitAnnotatedAllowedTypes,
241
273
  ): ReadonlySet<TreeNodeSchema> {
274
+ // remove annotations before normalizing
275
+ const unannotated = unannotateImplicitAllowedTypes(types);
242
276
  const normalized = new Set<TreeNodeSchema>();
243
- if (isReadonlyArray(types)) {
277
+ if (isReadonlyArray(unannotated)) {
244
278
  // Types array must not be modified after it is normalized since that would result in the user of the normalized data having wrong (out of date) content.
245
- Object.freeze(types);
246
- for (const lazyType of types) {
279
+ Object.freeze(unannotated);
280
+ for (const lazyType of unannotated) {
247
281
  normalized.add(evaluateLazySchema(lazyType));
248
282
  }
249
283
  } else {
250
- normalized.add(evaluateLazySchema(types));
284
+ normalized.add(evaluateLazySchema(unannotated));
251
285
  }
252
286
  return normalized;
253
287
  }
@@ -255,9 +289,9 @@ export function normalizeAllowedTypes(
255
289
  /**
256
290
  * Normalizes an allowed type to an {@link AnnotatedAllowedType}, by adding empty annotations if they don't already exist.
257
291
  */
258
- export function normalizeToAnnotatedAllowedType<T extends TreeNodeSchema>(
259
- type: T | AnnotatedAllowedType<T> | AnnotatedAllowedType<LazyItem<T>>,
260
- ): AnnotatedAllowedType<T> | AnnotatedAllowedType<LazyItem<T>> {
292
+ export function normalizeToAnnotatedAllowedType<T extends LazyItem<TreeNodeSchema>>(
293
+ type: T | AnnotatedAllowedType<T>,
294
+ ): AnnotatedAllowedType<T> {
261
295
  return isAnnotatedAllowedType(type)
262
296
  ? type
263
297
  : {
@@ -317,19 +351,28 @@ export function unannotateImplicitAllowedTypes<Types extends ImplicitAnnotatedAl
317
351
  ): UnannotateImplicitAllowedTypes<Types> {
318
352
  return (
319
353
  isAnnotatedAllowedTypes(types)
320
- ? types.types.map((allowedType) =>
321
- isAnnotatedAllowedType(allowedType) ? allowedType.type : allowedType,
322
- )
354
+ ? types.types.map(unannotateAllowedType)
323
355
  : isReadonlyArray(types)
324
- ? types.map((allowedType) =>
325
- isAnnotatedAllowedType(allowedType) ? allowedType.type : allowedType,
326
- )
356
+ ? types.map(unannotateAllowedType)
327
357
  : isAnnotatedAllowedType(types)
328
- ? (types.type as UnannotateImplicitAllowedTypes<Types>)
358
+ ? types.type
329
359
  : types
330
360
  ) as UnannotateImplicitAllowedTypes<Types>;
331
361
  }
332
362
 
363
+ /**
364
+ * Converts an {@link AnnotatedAllowedType} to an {@link LazyItem} by removing any annotations.
365
+ * @remarks
366
+ * This does not evaluate any lazy schemas.
367
+ */
368
+ export function unannotateAllowedType<
369
+ Type extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
370
+ >(allowedType: Type): UnannotateAllowedType<Type> {
371
+ return isAnnotatedAllowedType(allowedType)
372
+ ? (allowedType.type as UnannotateAllowedType<Type>)
373
+ : (allowedType as UnannotateAllowedType<Type>);
374
+ }
375
+
333
376
  const cachedLazyItem = new WeakMap<() => unknown, unknown>();
334
377
 
335
378
  /**
@@ -342,13 +385,23 @@ export function evaluateLazySchema<T extends TreeNodeSchema>(value: LazyItem<T>)
342
385
  const evaluatedSchema = isLazy(value)
343
386
  ? (getOrCreate(cachedLazyItem, value, value) as T)
344
387
  : value;
345
- if (evaluatedSchema === undefined) {
388
+
389
+ checkForUninitializedSchema(evaluatedSchema);
390
+ markSchemaMostDerived(evaluatedSchema);
391
+ return evaluatedSchema;
392
+ }
393
+
394
+ /**
395
+ * Throws a UsageError if the provided schema is undefined, most likely due to being used before it was initialized.
396
+ */
397
+ export function checkForUninitializedSchema(
398
+ schema: ImplicitAnnotatedAllowedTypes | LazyItem<TreeNodeSchema>,
399
+ ): void {
400
+ if (schema === undefined) {
346
401
  throw new UsageError(
347
- `Encountered an undefined schema. This could indicate that some referenced schema has not yet been instantiated.`,
402
+ `Encountered an undefined schema. This could indicate that some referenced schema has not yet been instantiated. Consider using a lazy schema reference (like "() => schema") or delaying the evaluation of the lazy reference if one is already being used.`,
348
403
  );
349
404
  }
350
- markSchemaMostDerived(evaluatedSchema);
351
- return evaluatedSchema;
352
405
  }
353
406
 
354
407
  /**
@@ -28,34 +28,36 @@ import { walkAllowedTypes } from "./walkSchema.js";
28
28
  * This design is the same as {@link FlexTreeContext} with its base type and {@link FlexTreeHydratedContext} extending it.
29
29
  */
30
30
  export class Context {
31
- /**
32
- * All schema which could transitively be used under the associated node.
33
- * @remarks
34
- * While generally {@link TreeNodeSchema} are referenced as objects and thus do not need to be looked up by identifier,
35
- * there are a few cases (mainly constructing new TreeNodes from existing tree data) where such a lookup is useful.
36
- * Having this map in the context addresses this use-case.
37
- * @privateRemarks
38
- * This design mirrors how {@link FlexTreeSchema} are accessed off the {@link FlexTreeContext}, making the migration away from them simpler.
39
- */
40
- public readonly schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeSchema>;
41
-
42
- /**
43
- * Builds the context.
44
- * @remarks
45
- * Since this walks the schema, it must not be invoked during schema declaration or schema forward references could fail to be resolved.
46
- */
47
- public constructor(
31
+ public static schemaMapFromRootSchema(
48
32
  rootSchema: NormalizedAnnotatedAllowedTypes,
49
- public readonly flexContext: FlexTreeContext,
50
- ) {
33
+ ): ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeSchema> {
51
34
  const schema: Map<TreeNodeSchemaIdentifier, TreeNodeSchema> = new Map();
52
35
  walkAllowedTypes(rootSchema, {
53
36
  node(nodeSchema) {
54
37
  schema.set(brand(nodeSchema.identifier), nodeSchema);
55
38
  },
56
39
  });
57
- this.schema = schema;
40
+ return schema;
58
41
  }
42
+
43
+ /**
44
+ * Builds the context.
45
+ * @remarks
46
+ * Since this walks the schema, it must not be invoked during schema declaration or schema forward references could fail to be resolved.
47
+ */
48
+ public constructor(
49
+ public readonly flexContext: FlexTreeContext,
50
+ /**
51
+ * All schema which could transitively be used under the associated node.
52
+ * @remarks
53
+ * While generally {@link TreeNodeSchema} are referenced as objects and thus do not need to be looked up by identifier,
54
+ * there are a few cases (mainly constructing new TreeNodes from existing tree data) where such a lookup is useful.
55
+ * Having this map in the context addresses this use-case.
56
+ * @privateRemarks
57
+ * This design mirrors how {@link FlexTreeSchema} are accessed off the {@link FlexTreeContext}, making the migration away from them simpler.
58
+ */
59
+ public readonly schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeSchema>,
60
+ ) {}
59
61
  }
60
62
 
61
63
  /**
@@ -64,9 +66,9 @@ export class Context {
64
66
  */
65
67
  export class HydratedContext extends Context {
66
68
  public constructor(
67
- rootSchema: NormalizedAnnotatedAllowedTypes,
68
69
  public override readonly flexContext: FlexTreeHydratedContext,
70
+ schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeSchema>,
69
71
  ) {
70
- super(rootSchema, flexContext);
72
+ super(flexContext, schema);
71
73
  }
72
74
  }
@@ -53,9 +53,12 @@ export {
53
53
  isAnnotatedAllowedType,
54
54
  normalizeAllowedTypes,
55
55
  normalizeAnnotatedAllowedTypes,
56
+ normalizeToAnnotatedAllowedType,
56
57
  unannotateImplicitAllowedTypes,
57
58
  markSchemaMostDerived,
58
59
  evaluateLazySchema,
60
+ createSchemaUpgrade,
61
+ type SchemaUpgrade,
59
62
  } from "./allowedTypes.js";
60
63
  export type {
61
64
  AnnotatedAllowedType,
@@ -72,11 +75,10 @@ export type {
72
75
  UnannotateAllowedTypes,
73
76
  UnannotateAllowedType,
74
77
  UnannotateAllowedTypesList,
75
- UnannotateAllowedTypeOrLazyItem,
76
78
  AllowedTypeMetadata,
77
79
  AnnotatedAllowedTypes,
78
80
  } from "./allowedTypes.js";
79
- export { walkAllowedTypes, type SchemaVisitor } from "./walkSchema.js";
81
+ export { walkAllowedTypes, walkNodeSchema, type SchemaVisitor } from "./walkSchema.js";
80
82
  export { Context, HydratedContext } from "./context.js";
81
83
  export {
82
84
  getOrCreateNodeFromInnerNode,
@@ -100,4 +102,11 @@ export {
100
102
  TreeNodeValid,
101
103
  type MostDerivedData,
102
104
  createTreeNodeSchemaPrivateData,
105
+ isClassBasedSchema,
103
106
  } from "./treeNodeValid.js";
107
+ export type { SimpleNodeSchemaBase } from "./simpleNodeSchemaBase.js";
108
+ export {
109
+ type StoredSchemaGenerationOptions,
110
+ convertAllowedTypes,
111
+ allowedTypeFilter,
112
+ } from "./toStored.js";
@@ -0,0 +1,30 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type { NodeKind, NodeSchemaMetadata } from "./treeNodeSchema.js";
7
+
8
+ /**
9
+ * Base interface for {@link TreeNodeSchema} and {@link SimpleNodeSchema} types.
10
+ * Once simple schema is stable this doesn't have a reason to be kept `@system`, but it could be.
11
+ * @system
12
+ * @public
13
+ * @sealed
14
+ */
15
+ export interface SimpleNodeSchemaBase<
16
+ out TNodeKind extends NodeKind,
17
+ out TCustomMetadata = unknown,
18
+ > {
19
+ /**
20
+ * The {@link NodeKind}.
21
+ *
22
+ * @remarks can be used to type-switch between implementations.
23
+ */
24
+ readonly kind: TNodeKind;
25
+
26
+ /**
27
+ * User-provided {@link NodeSchemaMetadata} for this schema.
28
+ */
29
+ readonly metadata: NodeSchemaMetadata<TCustomMetadata>;
30
+ }
@@ -0,0 +1,58 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { brand } from "../../util/index.js";
7
+ import {
8
+ normalizeAnnotatedAllowedTypes,
9
+ type AnnotatedAllowedType,
10
+ type ImplicitAnnotatedAllowedTypes,
11
+ type SchemaUpgrade,
12
+ } from "./allowedTypes.js";
13
+ import type { TreeNodeSchemaIdentifier, TreeTypeSet } from "../../core/index.js";
14
+
15
+ /**
16
+ * Options for generating a {@link TreeStoredSchema} from view schema.
17
+ */
18
+ export interface StoredSchemaGenerationOptions {
19
+ /**
20
+ * Determines whether to include staged schema in the resulting stored schema.
21
+ * @remarks
22
+ * Due to caching, the behavior of this function must be pure.
23
+ */
24
+ includeStaged(upgrade: SchemaUpgrade): boolean;
25
+ }
26
+
27
+ /**
28
+ * Filters an allowed type based on the provided options.
29
+ * @param allowedType - The allowed type to filter.
30
+ * @param options - The options to use for filtering.
31
+ * @returns Whether the allowed type passes the filter.
32
+ */
33
+ export function allowedTypeFilter(
34
+ allowedType: AnnotatedAllowedType,
35
+ options: StoredSchemaGenerationOptions,
36
+ ): boolean {
37
+ // If the allowed type is staged, only include it if the options allow it.
38
+ if (allowedType.metadata.stagedSchemaUpgrade !== undefined) {
39
+ return options.includeStaged(allowedType.metadata.stagedSchemaUpgrade);
40
+ }
41
+ return true;
42
+ }
43
+
44
+ /**
45
+ * Converts an ImplicitAnnotatedAllowedTypes to a stored schema.
46
+ * @param schema - The schema to convert.
47
+ * @param options - The options to use for filtering.
48
+ * @returns The converted stored schema.
49
+ */
50
+ export function convertAllowedTypes(
51
+ schema: ImplicitAnnotatedAllowedTypes,
52
+ options: StoredSchemaGenerationOptions,
53
+ ): TreeTypeSet {
54
+ const filtered: TreeNodeSchemaIdentifier[] = normalizeAnnotatedAllowedTypes(schema)
55
+ .types.filter((allowedType) => allowedTypeFilter(allowedType, options))
56
+ .map((a) => brand(a.type.identifier));
57
+ return new Set(filtered);
58
+ }
@@ -131,7 +131,7 @@ export class TreeNodeKernel {
131
131
  /**
132
132
  * Create a TreeNodeKernel which can be looked up with {@link getKernel}.
133
133
  *
134
- * @param initialContext - context from when this node was originally crated.
134
+ * @param initialContext - context from when this node was originally created. Only used when unhydrated.
135
135
  * @param innerNode - When unhydrated/raw or marinated the MapTreeNode. FlexTreeNode when cooked.
136
136
  * @remarks
137
137
  * Exactly one kernel per TreeNode should be created.
@@ -6,7 +6,7 @@
6
6
  import { assert } from "@fluidframework/core-utils/internal";
7
7
  import type { IFluidHandle } from "@fluidframework/core-interfaces";
8
8
 
9
- import type { SimpleNodeSchemaBase } from "../simpleSchema.js";
9
+ import type { SimpleNodeSchemaBase } from "./simpleNodeSchemaBase.js";
10
10
  import type { TreeNode } from "./treeNode.js";
11
11
  import type { InternalTreeNode, Unhydrated } from "./types.js";
12
12
  import type { UnionToIntersection } from "../../util/index.js";
@@ -15,9 +15,10 @@ import type {
15
15
  NormalizedAnnotatedAllowedTypes,
16
16
  } from "./allowedTypes.js";
17
17
  import type { Context } from "./context.js";
18
- import type { FieldKey, NodeData } from "../../core/index.js";
18
+ import type { FieldKey, NodeData, TreeNodeStoredSchema } from "../../core/index.js";
19
19
  import type { UnhydratedFlexTreeField } from "./unhydratedFlexTree.js";
20
20
  import type { FactoryContent } from "../unhydratedFlexTreeFromInsertable.js";
21
+ import type { StoredSchemaGenerationOptions } from "./toStored.js";
21
22
 
22
23
  /**
23
24
  * Schema for a {@link TreeNode} or {@link TreeLeafValue}.
@@ -396,6 +397,11 @@ export interface TreeNodeSchemaPrivateData {
396
397
  * Idempotent initialization function that pre-caches data and can dereference lazy schema references.
397
398
  */
398
399
  idempotentInitialize(): TreeNodeSchemaInitializedData;
400
+
401
+ /**
402
+ * Converts a the schema into a {@link TreeNodeStoredSchema}.
403
+ */
404
+ toStored(options: StoredSchemaGenerationOptions): TreeNodeStoredSchema;
399
405
  }
400
406
 
401
407
  /**
@@ -10,7 +10,7 @@ import { type FlexTreeNode, isFlexTreeNode } from "../../feature-libraries/index
10
10
 
11
11
  import { markEager } from "./flexList.js";
12
12
  import { inPrototypeChain, privateToken, TreeNode } from "./treeNode.js";
13
- import type { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
13
+ import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
14
14
  import {
15
15
  NodeKind,
16
16
  type TreeNodeSchema,
@@ -27,6 +27,7 @@ import {
27
27
  import type { InternalTreeNode } from "./types.js";
28
28
  import { typeSchemaSymbol } from "./withType.js";
29
29
  import type { ImplicitAnnotatedAllowedTypes } from "./allowedTypes.js";
30
+ import type { SimpleNodeSchemaBase } from "./simpleNodeSchemaBase.js";
30
31
 
31
32
  /**
32
33
  * Class which all {@link TreeNode}s must extend.
@@ -193,10 +194,17 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
193
194
  );
194
195
 
195
196
  const result = schema.prepareInstance(this, node);
197
+ // For unhydrated nodes, grab the context from the `simpleContext` (which likely is from cache.oneTimeInitialized.context,
198
+ // but might be customized for better schema evolution support like unknown optional fields like in clone)
199
+ // For hydrated nodes, this context is unused, so using the default from cache.oneTimeInitialized.context is always fine.
200
+ const context =
201
+ node instanceof UnhydratedFlexTreeNode
202
+ ? node.simpleContext
203
+ : cache.oneTimeInitialized.context;
196
204
  // The TreeNodeKernel associates itself the TreeNode (result here, not node) so it can be looked up later via getKernel.
197
205
  // If desired this could be put in a non-enumerable symbol property for lookup instead, but that gets messy going through proxies,
198
206
  // so just relying on the WeakMap seems like the cleanest approach.
199
- new TreeNodeKernel(result, schema, node, cache.oneTimeInitialized.context);
207
+ new TreeNodeKernel(result, schema, node, context);
200
208
 
201
209
  return result;
202
210
  }
@@ -226,7 +234,7 @@ export interface MostDerivedData {
226
234
  export function schemaAsTreeNodeValid(
227
235
  schema: TreeNodeSchemaCore<string, NodeKind, boolean>,
228
236
  ): typeof TreeNodeValid & TreeNodeSchema {
229
- if (!inPrototypeChain(schema, TreeNodeValid)) {
237
+ if (!isClassBasedSchema(schema)) {
230
238
  // Use JSON.stringify to quote and escape identifier string.
231
239
  throw new UsageError(
232
240
  `Schema for ${JSON.stringify(
@@ -235,7 +243,16 @@ export function schemaAsTreeNodeValid(
235
243
  );
236
244
  }
237
245
 
238
- return schema as typeof TreeNodeValid & TreeNodeSchema;
246
+ return schema;
247
+ }
248
+
249
+ /**
250
+ * Check if a schema is a {@link TreeNodeValid}.
251
+ */
252
+ export function isClassBasedSchema(
253
+ schema: SimpleNodeSchemaBase<NodeKind>,
254
+ ): schema is typeof TreeNodeValid & TreeNodeSchema {
255
+ return inPrototypeChain(schema, TreeNodeValid);
239
256
  }
240
257
 
241
258
  /**
@@ -246,6 +263,7 @@ export function schemaAsTreeNodeValid(
246
263
  export function createTreeNodeSchemaPrivateData(
247
264
  schema: TreeNodeSchemaCore<string, NodeKind, boolean>,
248
265
  childAnnotatedAllowedTypes: readonly ImplicitAnnotatedAllowedTypes[],
266
+ toStored: TreeNodeSchemaPrivateData["toStored"],
249
267
  ): TreeNodeSchemaPrivateData {
250
268
  const schemaValid = schemaAsTreeNodeValid(schema);
251
269
  // Since this closes over the schema, ensure this schema is marked as most derived
@@ -255,6 +273,7 @@ export function createTreeNodeSchemaPrivateData(
255
273
  return {
256
274
  idempotentInitialize: () => schemaValid.oneTimeInitialize().oneTimeInitialized,
257
275
  childAnnotatedAllowedTypes,
276
+ toStored,
258
277
  };
259
278
  }
260
279
 
@@ -5,12 +5,14 @@
5
5
 
6
6
  import {
7
7
  normalizeAnnotatedAllowedTypes,
8
+ type AnnotatedAllowedType,
8
9
  type NormalizedAnnotatedAllowedTypes,
9
10
  } from "./allowedTypes.js";
10
11
  import { getTreeNodeSchemaPrivateData, type TreeNodeSchema } from "./treeNodeSchema.js";
11
12
 
12
13
  /**
13
14
  * Traverses all {@link TreeNodeSchema} schema reachable from `schema`, applying the visitor pattern.
15
+ * @internal
14
16
  */
15
17
  export function walkNodeSchema(
16
18
  schema: TreeNodeSchema,
@@ -42,31 +44,49 @@ export function walkNodeSchema(
42
44
 
43
45
  /**
44
46
  * Traverses all {@link TreeNodeSchema} schema reachable from `allowedTypes`, applying the visitor pattern.
47
+ * @internal
45
48
  */
46
49
  export function walkAllowedTypes(
47
50
  annotatedAllowedTypes: NormalizedAnnotatedAllowedTypes,
48
51
  visitor: SchemaVisitor,
49
52
  visitedSet: Set<TreeNodeSchema> = new Set(),
50
53
  ): void {
51
- for (const { type } of annotatedAllowedTypes.types) {
52
- walkNodeSchema(type, visitor, visitedSet);
54
+ for (const allowedType of annotatedAllowedTypes.types) {
55
+ if ((visitor.allowedTypeFilter ?? (() => true))(allowedType)) {
56
+ walkNodeSchema(allowedType.type, visitor, visitedSet);
57
+ }
53
58
  }
54
59
  visitor.allowedTypes?.(annotatedAllowedTypes);
55
60
  }
56
61
 
57
62
  /**
58
- * Callbacks for use in {@link walkFieldSchema} / {@link walkAllowedTypes} / {@link walkNodeSchema}.
63
+ * Callbacks and options for use in {@link walkFieldSchema} / {@link walkAllowedTypes} / {@link walkNodeSchema}.
64
+ * @internal
59
65
  */
60
66
  export interface SchemaVisitor {
61
67
  /**
62
- * Called once for each node schema.
68
+ * Called once for each node schema reached.
63
69
  */
64
70
  node?: (schema: TreeNodeSchema) => void;
65
71
  /**
66
72
  * Called once for each set of allowed types.
67
- * Includes implicit allowed types (when a single type was used instead of an array).
73
+ * @remarks
74
+ * This includes every field, as well as the allowed types for maps and arrays nodes and the root if starting at {@link walkAllowedTypes}.
68
75
  *
69
- * This includes every field, but also the allowed types array for maps and arrays and the root if starting at {@link walkAllowedTypes}.
76
+ * Each allowed types in the schema is visited as it was in the original schema except for normalization.
77
+ *
78
+ * After this is called {@link SchemaVisitor.allowedTypeFilter} is applied to each allowed type in the schema to determine which of them are walked into.
70
79
  */
71
80
  allowedTypes?: (allowedTypes: NormalizedAnnotatedAllowedTypes) => void;
81
+ /**
82
+ * If true, will walk into this `allowedType`.
83
+ * If false, the `allowedType` will not be walked into.
84
+ *
85
+ * If not provided, all allowedTypes will be walked into.
86
+ * @remarks
87
+ * Called after {@link SchemaVisitor.allowedTypes}.
88
+ * @privateRemarks
89
+ * It would be possible to combine this with `allowedTypes` into a single callback, but for the current usage this separation is more convenient.
90
+ */
91
+ allowedTypeFilter?: (allowedType: AnnotatedAllowedType<TreeNodeSchema>) => boolean;
72
92
  }
@@ -15,19 +15,27 @@ import {
15
15
  type TreeNodeSchemaInitializedData,
16
16
  } from "./core/index.js";
17
17
  import { normalizeFieldSchema, type ImplicitFieldSchema } from "./fieldSchema.js";
18
- import { toStoredSchema } from "./toStoredSchema.js";
18
+ import { toStoredSchema, toUnhydratedSchema } from "./toStoredSchema.js";
19
19
 
20
20
  const contextCache: WeakMap<ImplicitFieldSchema, Context> = new WeakMap();
21
21
 
22
22
  /**
23
23
  * Utility for creating {@link Context}s for unhydrated nodes.
24
+ * @remarks
25
+ * The resulting context will not allow any unknown optional fields.
24
26
  */
25
27
  export function getUnhydratedContext(schema: ImplicitFieldSchema): Context {
26
28
  return getOrCreate(contextCache, schema, (s) => {
27
29
  const normalized = normalizeFieldSchema(schema);
28
30
 
29
- const flexContext = new UnhydratedContext(defaultSchemaPolicy, toStoredSchema(schema));
30
- return new Context(normalized.annotatedAllowedTypesNormalized, flexContext);
31
+ const flexContext = new UnhydratedContext(
32
+ defaultSchemaPolicy,
33
+ toStoredSchema(schema, toUnhydratedSchema),
34
+ );
35
+ return new Context(
36
+ flexContext,
37
+ Context.schemaMapFromRootSchema(normalized.annotatedAllowedTypesNormalized),
38
+ );
31
39
  });
32
40
  }
33
41
 
@@ -468,7 +468,8 @@ export class FieldSchemaAlpha<
468
468
  normalizeAnnotatedAllowedTypes(annotatedAllowedTypes),
469
469
  );
470
470
  this.lazyIdentifiers = new Lazy(
471
- () => new Set([...this.allowedTypeSet].map((t) => t.identifier)),
471
+ () =>
472
+ new Set(this.annotatedAllowedTypesNormalized.types.map(({ type }) => type.identifier)),
472
473
  );
473
474
  this.propsAlpha = props;
474
475
  }
@@ -488,6 +489,7 @@ export class FieldSchemaAlpha<
488
489
 
489
490
  /**
490
491
  * Normalizes a {@link ImplicitFieldSchema} or {@link ImplicitAnnotatedFieldSchema} to a {@link FieldSchema}.
492
+ * @internal
491
493
  */
492
494
  export function normalizeFieldSchema(
493
495
  schema: ImplicitFieldSchema | ImplicitAnnotatedFieldSchema,