@fluidframework/tree 2.72.0 → 2.73.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 (609) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/api-report/tree.alpha.api.md +17 -30
  3. package/dist/alpha.d.ts +3 -1
  4. package/dist/api.d.ts +6 -2
  5. package/dist/api.d.ts.map +1 -1
  6. package/dist/api.js +2 -11
  7. package/dist/api.js.map +1 -1
  8. package/dist/codec/codec.d.ts +9 -2
  9. package/dist/codec/codec.d.ts.map +1 -1
  10. package/dist/codec/codec.js +9 -2
  11. package/dist/codec/codec.js.map +1 -1
  12. package/dist/codec/index.d.ts +1 -1
  13. package/dist/codec/index.d.ts.map +1 -1
  14. package/dist/codec/index.js +2 -1
  15. package/dist/codec/index.js.map +1 -1
  16. package/dist/codec/versioned/codec.d.ts +7 -2
  17. package/dist/codec/versioned/codec.d.ts.map +1 -1
  18. package/dist/codec/versioned/codec.js +24 -1
  19. package/dist/codec/versioned/codec.js.map +1 -1
  20. package/dist/codec/versioned/index.d.ts +1 -1
  21. package/dist/codec/versioned/index.d.ts.map +1 -1
  22. package/dist/codec/versioned/index.js +2 -1
  23. package/dist/codec/versioned/index.js.map +1 -1
  24. package/dist/core/schema-stored/schema.d.ts +12 -1
  25. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  26. package/dist/core/schema-stored/schema.js.map +1 -1
  27. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  28. package/dist/core/tree/detachedFieldIndexCodecs.js +5 -3
  29. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  30. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +4 -5
  31. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  32. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  33. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  34. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +1 -0
  35. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  36. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +2 -1
  37. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  38. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  39. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  40. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  41. package/dist/feature-libraries/chunked-forest/codec/codecs.js +31 -17
  42. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  43. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +6 -6
  44. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  45. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -2
  46. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  47. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +156 -4
  48. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  49. package/dist/feature-libraries/chunked-forest/codec/format.js +7 -3
  50. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  51. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.d.ts +8 -3
  52. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  53. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.js +4 -1
  54. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  55. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  56. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/codec/index.js +2 -1
  58. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  59. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +13 -13
  60. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  61. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +23 -6
  62. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  63. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.d.ts +9 -8
  64. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.d.ts.map +1 -1
  65. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +20 -4
  66. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  67. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  68. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  69. package/dist/feature-libraries/chunked-forest/index.js +2 -1
  70. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  71. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +35 -17
  72. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  73. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +53 -55
  74. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  75. package/dist/feature-libraries/default-schema/index.d.ts +1 -3
  76. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  77. package/dist/feature-libraries/default-schema/index.js +2 -8
  78. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  79. package/dist/feature-libraries/forest-summary/format.d.ts +2 -2
  80. package/dist/feature-libraries/forest-summary/format.d.ts.map +1 -1
  81. package/dist/feature-libraries/forest-summary/format.js +4 -2
  82. package/dist/feature-libraries/forest-summary/format.js.map +1 -1
  83. package/dist/feature-libraries/index.d.ts +4 -3
  84. package/dist/feature-libraries/index.d.ts.map +1 -1
  85. package/dist/feature-libraries/index.js +8 -7
  86. package/dist/feature-libraries/index.js.map +1 -1
  87. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  88. package/dist/feature-libraries/modular-schema/comparison.js +1 -2
  89. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  90. package/dist/feature-libraries/modular-schema/fieldKind.d.ts +38 -12
  91. package/dist/feature-libraries/modular-schema/fieldKind.d.ts.map +1 -1
  92. package/dist/feature-libraries/modular-schema/fieldKind.js +29 -11
  93. package/dist/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  94. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.d.ts +2 -2
  95. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  96. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  97. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +2 -2
  98. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  99. package/dist/feature-libraries/modular-schema/genericFieldKind.js +3 -2
  100. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  101. package/dist/feature-libraries/modular-schema/index.d.ts +0 -1
  102. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  103. package/dist/feature-libraries/modular-schema/index.js +1 -3
  104. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  105. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts +5 -6
  106. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  107. package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  108. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -8
  109. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  110. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1 -2
  111. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +66 -9
  113. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  114. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  115. package/dist/feature-libraries/object-forest/objectForest.js +3 -2
  116. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  117. package/dist/feature-libraries/optional-field/index.d.ts +1 -1
  118. package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
  119. package/dist/feature-libraries/optional-field/index.js.map +1 -1
  120. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  121. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  122. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  123. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  124. package/dist/feature-libraries/schema-index/codec.js +5 -3
  125. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  126. package/dist/feature-libraries/{default-schema/schemaChecker.d.ts → schemaChecker.d.ts} +2 -2
  127. package/dist/feature-libraries/schemaChecker.d.ts.map +1 -0
  128. package/dist/feature-libraries/{default-schema/schemaChecker.js → schemaChecker.js} +3 -3
  129. package/dist/feature-libraries/schemaChecker.js.map +1 -0
  130. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  131. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js +0 -2
  132. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  133. package/dist/index.d.ts +2 -2
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +5 -3
  136. package/dist/index.js.map +1 -1
  137. package/dist/packageVersion.d.ts +1 -1
  138. package/dist/packageVersion.js +1 -1
  139. package/dist/packageVersion.js.map +1 -1
  140. package/dist/shared-tree/index.d.ts +1 -1
  141. package/dist/shared-tree/index.d.ts.map +1 -1
  142. package/dist/shared-tree/index.js +1 -2
  143. package/dist/shared-tree/index.js.map +1 -1
  144. package/dist/shared-tree/sharedTree.d.ts +0 -44
  145. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  146. package/dist/shared-tree/sharedTree.js +1 -52
  147. package/dist/shared-tree/sharedTree.js.map +1 -1
  148. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  149. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  150. package/dist/shared-tree/sharedTreeChangeCodecs.js +0 -2
  151. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  152. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  153. package/dist/shared-tree-core/editManagerCodecs.js +12 -6
  154. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  155. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +3 -4
  156. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  157. package/dist/shared-tree-core/editManagerFormatCommons.js +5 -8
  158. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  159. package/dist/shared-tree-core/index.d.ts +2 -2
  160. package/dist/shared-tree-core/index.d.ts.map +1 -1
  161. package/dist/shared-tree-core/index.js +3 -2
  162. package/dist/shared-tree-core/index.js.map +1 -1
  163. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  164. package/dist/shared-tree-core/messageCodecs.js +20 -9
  165. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  166. package/dist/shared-tree-core/messageFormat.d.ts +4 -6
  167. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  168. package/dist/shared-tree-core/messageFormat.js +9 -7
  169. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  170. package/dist/simple-tree/api/configuration.d.ts +2 -0
  171. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  172. package/dist/simple-tree/api/configuration.js +10 -0
  173. package/dist/simple-tree/api/configuration.js.map +1 -1
  174. package/dist/simple-tree/api/index.d.ts +1 -0
  175. package/dist/simple-tree/api/index.d.ts.map +1 -1
  176. package/dist/simple-tree/api/index.js +5 -1
  177. package/dist/simple-tree/api/index.js.map +1 -1
  178. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  179. package/dist/simple-tree/api/schemaFromSimple.js +7 -1
  180. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  181. package/dist/simple-tree/api/simpleSchemaCodec.js +4 -6
  182. package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  183. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +103 -0
  184. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -0
  185. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +128 -0
  186. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -0
  187. package/dist/simple-tree/api/tree.d.ts +1 -1
  188. package/dist/simple-tree/api/tree.js +1 -1
  189. package/dist/simple-tree/api/tree.js.map +1 -1
  190. package/dist/simple-tree/core/allowedTypes.js +1 -1
  191. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  192. package/dist/simple-tree/core/index.d.ts +3 -3
  193. package/dist/simple-tree/core/index.d.ts.map +1 -1
  194. package/dist/simple-tree/core/index.js +3 -1
  195. package/dist/simple-tree/core/index.js.map +1 -1
  196. package/dist/simple-tree/core/toStored.d.ts +12 -5
  197. package/dist/simple-tree/core/toStored.d.ts.map +1 -1
  198. package/dist/simple-tree/core/toStored.js +26 -10
  199. package/dist/simple-tree/core/toStored.js.map +1 -1
  200. package/dist/simple-tree/core/treeNodeSchema.d.ts +1 -6
  201. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  202. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  203. package/dist/simple-tree/core/treeNodeValid.d.ts +1 -1
  204. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  205. package/dist/simple-tree/core/treeNodeValid.js +1 -2
  206. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  207. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  208. package/dist/simple-tree/fieldSchema.js +1 -8
  209. package/dist/simple-tree/fieldSchema.js.map +1 -1
  210. package/dist/simple-tree/index.d.ts +2 -2
  211. package/dist/simple-tree/index.d.ts.map +1 -1
  212. package/dist/simple-tree/index.js +9 -3
  213. package/dist/simple-tree/index.js.map +1 -1
  214. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  215. package/dist/simple-tree/leafNodeSchema.js +0 -1
  216. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  217. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  218. package/dist/simple-tree/node-kinds/array/arrayNode.js +13 -49
  219. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  220. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  221. package/dist/simple-tree/node-kinds/map/mapNode.js +1 -5
  222. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  223. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  224. package/dist/simple-tree/node-kinds/object/objectNode.js +2 -10
  225. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  226. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  227. package/dist/simple-tree/node-kinds/record/recordNode.js +1 -5
  228. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  229. package/dist/simple-tree/simpleSchema.d.ts +15 -3
  230. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  231. package/dist/simple-tree/simpleSchema.js.map +1 -1
  232. package/dist/simple-tree/toStoredSchema.d.ts +20 -8
  233. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  234. package/dist/simple-tree/toStoredSchema.js +27 -22
  235. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  236. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  237. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +18 -15
  238. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  239. package/dist/tableSchema.d.ts +22 -52
  240. package/dist/tableSchema.d.ts.map +1 -1
  241. package/dist/tableSchema.js +141 -277
  242. package/dist/tableSchema.js.map +1 -1
  243. package/dist/util/arrayUtilities.d.ts +45 -0
  244. package/dist/util/arrayUtilities.d.ts.map +1 -0
  245. package/dist/util/arrayUtilities.js +76 -0
  246. package/dist/util/arrayUtilities.js.map +1 -0
  247. package/dist/util/index.d.ts +1 -0
  248. package/dist/util/index.d.ts.map +1 -1
  249. package/dist/util/index.js +7 -2
  250. package/dist/util/index.js.map +1 -1
  251. package/lib/alpha.d.ts +3 -1
  252. package/lib/api.d.ts +6 -2
  253. package/lib/api.d.ts.map +1 -1
  254. package/lib/api.js +2 -13
  255. package/lib/api.js.map +1 -1
  256. package/lib/codec/codec.d.ts +9 -2
  257. package/lib/codec/codec.d.ts.map +1 -1
  258. package/lib/codec/codec.js +9 -2
  259. package/lib/codec/codec.js.map +1 -1
  260. package/lib/codec/index.d.ts +1 -1
  261. package/lib/codec/index.d.ts.map +1 -1
  262. package/lib/codec/index.js +1 -1
  263. package/lib/codec/index.js.map +1 -1
  264. package/lib/codec/versioned/codec.d.ts +7 -2
  265. package/lib/codec/versioned/codec.d.ts.map +1 -1
  266. package/lib/codec/versioned/codec.js +22 -0
  267. package/lib/codec/versioned/codec.js.map +1 -1
  268. package/lib/codec/versioned/index.d.ts +1 -1
  269. package/lib/codec/versioned/index.d.ts.map +1 -1
  270. package/lib/codec/versioned/index.js +1 -1
  271. package/lib/codec/versioned/index.js.map +1 -1
  272. package/lib/core/schema-stored/schema.d.ts +12 -1
  273. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  274. package/lib/core/schema-stored/schema.js.map +1 -1
  275. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  276. package/lib/core/tree/detachedFieldIndexCodecs.js +5 -3
  277. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  278. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +4 -5
  279. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  280. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  281. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  282. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +2 -1
  283. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  284. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +2 -1
  285. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  286. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  287. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  288. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  289. package/lib/feature-libraries/chunked-forest/codec/codecs.js +34 -20
  290. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  291. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +6 -6
  292. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  293. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -2
  294. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  295. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +156 -4
  296. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  297. package/lib/feature-libraries/chunked-forest/codec/format.js +6 -2
  298. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  299. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.d.ts +8 -3
  300. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  301. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.js +4 -1
  302. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  303. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  304. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  305. package/lib/feature-libraries/chunked-forest/codec/index.js +1 -1
  306. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  307. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +13 -13
  308. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  309. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -6
  310. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  311. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.d.ts +9 -8
  312. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.d.ts.map +1 -1
  313. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +17 -2
  314. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  315. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  316. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  317. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  318. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  319. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +35 -17
  320. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  321. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +55 -57
  322. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  323. package/lib/feature-libraries/default-schema/index.d.ts +1 -3
  324. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  325. package/lib/feature-libraries/default-schema/index.js +1 -3
  326. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  327. package/lib/feature-libraries/forest-summary/format.d.ts +2 -2
  328. package/lib/feature-libraries/forest-summary/format.d.ts.map +1 -1
  329. package/lib/feature-libraries/forest-summary/format.js +4 -2
  330. package/lib/feature-libraries/forest-summary/format.js.map +1 -1
  331. package/lib/feature-libraries/index.d.ts +4 -3
  332. package/lib/feature-libraries/index.d.ts.map +1 -1
  333. package/lib/feature-libraries/index.js +4 -3
  334. package/lib/feature-libraries/index.js.map +1 -1
  335. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  336. package/lib/feature-libraries/modular-schema/comparison.js +1 -2
  337. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  338. package/lib/feature-libraries/modular-schema/fieldKind.d.ts +38 -12
  339. package/lib/feature-libraries/modular-schema/fieldKind.d.ts.map +1 -1
  340. package/lib/feature-libraries/modular-schema/fieldKind.js +29 -11
  341. package/lib/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  342. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.d.ts +2 -2
  343. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  344. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  345. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +2 -2
  346. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  347. package/lib/feature-libraries/modular-schema/genericFieldKind.js +3 -2
  348. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  349. package/lib/feature-libraries/modular-schema/index.d.ts +0 -1
  350. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  351. package/lib/feature-libraries/modular-schema/index.js +0 -1
  352. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  353. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts +5 -6
  354. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  355. package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  356. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -8
  357. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  358. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1 -2
  359. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  360. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +66 -9
  361. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  362. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  363. package/lib/feature-libraries/object-forest/objectForest.js +2 -1
  364. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  365. package/lib/feature-libraries/optional-field/index.d.ts +1 -1
  366. package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
  367. package/lib/feature-libraries/optional-field/index.js.map +1 -1
  368. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  369. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  370. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  371. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  372. package/lib/feature-libraries/schema-index/codec.js +5 -3
  373. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  374. package/lib/feature-libraries/{default-schema/schemaChecker.d.ts → schemaChecker.d.ts} +2 -2
  375. package/lib/feature-libraries/schemaChecker.d.ts.map +1 -0
  376. package/lib/feature-libraries/{default-schema/schemaChecker.js → schemaChecker.js} +3 -3
  377. package/lib/feature-libraries/schemaChecker.js.map +1 -0
  378. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  379. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js +0 -2
  380. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  381. package/lib/index.d.ts +2 -2
  382. package/lib/index.d.ts.map +1 -1
  383. package/lib/index.js +2 -2
  384. package/lib/index.js.map +1 -1
  385. package/lib/packageVersion.d.ts +1 -1
  386. package/lib/packageVersion.js +1 -1
  387. package/lib/packageVersion.js.map +1 -1
  388. package/lib/shared-tree/index.d.ts +1 -1
  389. package/lib/shared-tree/index.d.ts.map +1 -1
  390. package/lib/shared-tree/index.js +1 -1
  391. package/lib/shared-tree/index.js.map +1 -1
  392. package/lib/shared-tree/sharedTree.d.ts +0 -44
  393. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  394. package/lib/shared-tree/sharedTree.js +0 -51
  395. package/lib/shared-tree/sharedTree.js.map +1 -1
  396. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  397. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  398. package/lib/shared-tree/sharedTreeChangeCodecs.js +0 -2
  399. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  400. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  401. package/lib/shared-tree-core/editManagerCodecs.js +13 -7
  402. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  403. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +3 -4
  404. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  405. package/lib/shared-tree-core/editManagerFormatCommons.js +4 -7
  406. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  407. package/lib/shared-tree-core/index.d.ts +2 -2
  408. package/lib/shared-tree-core/index.d.ts.map +1 -1
  409. package/lib/shared-tree-core/index.js +2 -2
  410. package/lib/shared-tree-core/index.js.map +1 -1
  411. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  412. package/lib/shared-tree-core/messageCodecs.js +21 -10
  413. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  414. package/lib/shared-tree-core/messageFormat.d.ts +4 -6
  415. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  416. package/lib/shared-tree-core/messageFormat.js +8 -6
  417. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  418. package/lib/simple-tree/api/configuration.d.ts +2 -0
  419. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  420. package/lib/simple-tree/api/configuration.js +10 -0
  421. package/lib/simple-tree/api/configuration.js.map +1 -1
  422. package/lib/simple-tree/api/index.d.ts +1 -0
  423. package/lib/simple-tree/api/index.d.ts.map +1 -1
  424. package/lib/simple-tree/api/index.js +1 -0
  425. package/lib/simple-tree/api/index.js.map +1 -1
  426. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  427. package/lib/simple-tree/api/schemaFromSimple.js +8 -2
  428. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  429. package/lib/simple-tree/api/simpleSchemaCodec.js +5 -7
  430. package/lib/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  431. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +103 -0
  432. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -0
  433. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +122 -0
  434. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -0
  435. package/lib/simple-tree/api/tree.d.ts +1 -1
  436. package/lib/simple-tree/api/tree.js +1 -1
  437. package/lib/simple-tree/api/tree.js.map +1 -1
  438. package/lib/simple-tree/core/allowedTypes.js +1 -1
  439. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  440. package/lib/simple-tree/core/index.d.ts +3 -3
  441. package/lib/simple-tree/core/index.d.ts.map +1 -1
  442. package/lib/simple-tree/core/index.js +2 -2
  443. package/lib/simple-tree/core/index.js.map +1 -1
  444. package/lib/simple-tree/core/toStored.d.ts +12 -5
  445. package/lib/simple-tree/core/toStored.d.ts.map +1 -1
  446. package/lib/simple-tree/core/toStored.js +25 -9
  447. package/lib/simple-tree/core/toStored.js.map +1 -1
  448. package/lib/simple-tree/core/treeNodeSchema.d.ts +1 -6
  449. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  450. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  451. package/lib/simple-tree/core/treeNodeValid.d.ts +1 -1
  452. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  453. package/lib/simple-tree/core/treeNodeValid.js +1 -2
  454. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  455. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  456. package/lib/simple-tree/fieldSchema.js +2 -9
  457. package/lib/simple-tree/fieldSchema.js.map +1 -1
  458. package/lib/simple-tree/index.d.ts +2 -2
  459. package/lib/simple-tree/index.d.ts.map +1 -1
  460. package/lib/simple-tree/index.js +2 -2
  461. package/lib/simple-tree/index.js.map +1 -1
  462. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  463. package/lib/simple-tree/leafNodeSchema.js +1 -2
  464. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  465. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  466. package/lib/simple-tree/node-kinds/array/arrayNode.js +15 -51
  467. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  468. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  469. package/lib/simple-tree/node-kinds/map/mapNode.js +3 -7
  470. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  471. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  472. package/lib/simple-tree/node-kinds/object/objectNode.js +3 -11
  473. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  474. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  475. package/lib/simple-tree/node-kinds/record/recordNode.js +3 -7
  476. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  477. package/lib/simple-tree/simpleSchema.d.ts +15 -3
  478. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  479. package/lib/simple-tree/simpleSchema.js.map +1 -1
  480. package/lib/simple-tree/toStoredSchema.d.ts +20 -8
  481. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  482. package/lib/simple-tree/toStoredSchema.js +28 -24
  483. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  484. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  485. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +20 -17
  486. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  487. package/lib/tableSchema.d.ts +22 -52
  488. package/lib/tableSchema.d.ts.map +1 -1
  489. package/lib/tableSchema.js +143 -279
  490. package/lib/tableSchema.js.map +1 -1
  491. package/lib/util/arrayUtilities.d.ts +45 -0
  492. package/lib/util/arrayUtilities.d.ts.map +1 -0
  493. package/lib/util/arrayUtilities.js +69 -0
  494. package/lib/util/arrayUtilities.js.map +1 -0
  495. package/lib/util/index.d.ts +1 -0
  496. package/lib/util/index.d.ts.map +1 -1
  497. package/lib/util/index.js +1 -0
  498. package/lib/util/index.js.map +1 -1
  499. package/package.json +21 -21
  500. package/src/api.ts +22 -11
  501. package/src/codec/codec.ts +10 -2
  502. package/src/codec/index.ts +1 -0
  503. package/src/codec/versioned/codec.ts +40 -2
  504. package/src/codec/versioned/index.ts +1 -0
  505. package/src/core/schema-stored/schema.ts +12 -1
  506. package/src/core/tree/detachedFieldIndexCodecs.ts +10 -3
  507. package/src/feature-libraries/README.md +1 -1
  508. package/src/feature-libraries/chunked-forest/chunkTree.ts +3 -3
  509. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +5 -0
  510. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +2 -1
  511. package/src/feature-libraries/chunked-forest/codec/codecs.ts +52 -19
  512. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +8 -3
  513. package/src/feature-libraries/chunked-forest/codec/format.ts +14 -4
  514. package/src/feature-libraries/chunked-forest/codec/formatGeneric.ts +7 -2
  515. package/src/feature-libraries/chunked-forest/codec/index.ts +1 -4
  516. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +62 -9
  517. package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +24 -2
  518. package/src/feature-libraries/chunked-forest/index.ts +1 -1
  519. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +86 -74
  520. package/src/feature-libraries/default-schema/index.ts +1 -9
  521. package/src/feature-libraries/forest-summary/format.ts +15 -9
  522. package/src/feature-libraries/index.ts +7 -5
  523. package/src/feature-libraries/modular-schema/comparison.ts +2 -3
  524. package/src/feature-libraries/modular-schema/fieldKind.ts +90 -13
  525. package/src/feature-libraries/modular-schema/fieldKindConfiguration.ts +2 -3
  526. package/src/feature-libraries/modular-schema/genericFieldKind.ts +6 -6
  527. package/src/feature-libraries/modular-schema/index.ts +0 -1
  528. package/src/feature-libraries/modular-schema/isNeverTree.ts +7 -8
  529. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +13 -13
  530. package/src/feature-libraries/object-forest/objectForest.ts +2 -6
  531. package/src/feature-libraries/optional-field/index.ts +1 -0
  532. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +1 -5
  533. package/src/feature-libraries/schema-index/codec.ts +10 -3
  534. package/src/feature-libraries/{default-schema/schemaChecker.ts → schemaChecker.ts} +4 -4
  535. package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +0 -2
  536. package/src/index.ts +3 -1
  537. package/src/packageVersion.ts +1 -1
  538. package/src/shared-tree/index.ts +0 -1
  539. package/src/shared-tree/sharedTree.ts +0 -70
  540. package/src/shared-tree/sharedTreeChangeCodecs.ts +1 -6
  541. package/src/shared-tree-core/editManagerCodecs.ts +19 -7
  542. package/src/shared-tree-core/editManagerFormatCommons.ts +11 -12
  543. package/src/shared-tree-core/index.ts +6 -2
  544. package/src/shared-tree-core/messageCodecs.ts +32 -17
  545. package/src/shared-tree-core/messageFormat.ts +8 -6
  546. package/src/simple-tree/api/configuration.ts +17 -4
  547. package/src/simple-tree/api/index.ts +5 -0
  548. package/src/simple-tree/api/schemaFromSimple.ts +14 -6
  549. package/src/simple-tree/api/simpleSchemaCodec.ts +10 -9
  550. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +135 -0
  551. package/src/simple-tree/api/tree.ts +1 -1
  552. package/src/simple-tree/core/allowedTypes.ts +1 -1
  553. package/src/simple-tree/core/index.ts +3 -1
  554. package/src/simple-tree/core/toStored.ts +42 -18
  555. package/src/simple-tree/core/treeNodeSchema.ts +1 -7
  556. package/src/simple-tree/core/treeNodeValid.ts +0 -2
  557. package/src/simple-tree/fieldSchema.ts +2 -11
  558. package/src/simple-tree/index.ts +6 -1
  559. package/src/simple-tree/leafNodeSchema.ts +1 -2
  560. package/src/simple-tree/node-kinds/array/arrayNode.ts +26 -75
  561. package/src/simple-tree/node-kinds/map/mapNode.ts +1 -15
  562. package/src/simple-tree/node-kinds/object/objectNode.ts +2 -17
  563. package/src/simple-tree/node-kinds/record/recordNode.ts +1 -15
  564. package/src/simple-tree/simpleSchema.ts +16 -3
  565. package/src/simple-tree/toStoredSchema.ts +54 -38
  566. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +22 -17
  567. package/src/tableSchema.ts +110 -334
  568. package/src/util/arrayUtilities.ts +88 -0
  569. package/src/util/index.ts +6 -0
  570. package/dist/feature-libraries/default-schema/defaultSchema.d.ts +0 -10
  571. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +0 -1
  572. package/dist/feature-libraries/default-schema/defaultSchema.js +0 -15
  573. package/dist/feature-libraries/default-schema/defaultSchema.js.map +0 -1
  574. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +0 -1
  575. package/dist/feature-libraries/default-schema/schemaChecker.js.map +0 -1
  576. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.d.ts +0 -50
  577. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +0 -1
  578. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js +0 -76
  579. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js.map +0 -1
  580. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.d.ts +0 -12
  581. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.d.ts.map +0 -1
  582. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.js +0 -158
  583. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.js.map +0 -1
  584. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +0 -11
  585. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +0 -1
  586. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +0 -245
  587. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +0 -1
  588. package/lib/feature-libraries/default-schema/defaultSchema.d.ts +0 -10
  589. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +0 -1
  590. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -12
  591. package/lib/feature-libraries/default-schema/defaultSchema.js.map +0 -1
  592. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +0 -1
  593. package/lib/feature-libraries/default-schema/schemaChecker.js.map +0 -1
  594. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.d.ts +0 -50
  595. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +0 -1
  596. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js +0 -71
  597. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js.map +0 -1
  598. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.d.ts +0 -12
  599. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.d.ts.map +0 -1
  600. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.js +0 -154
  601. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.js.map +0 -1
  602. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +0 -11
  603. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +0 -1
  604. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +0 -241
  605. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +0 -1
  606. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -15
  607. package/src/feature-libraries/modular-schema/fieldKindWithEditor.ts +0 -108
  608. package/src/feature-libraries/optional-field/optionalFieldCodecV1.ts +0 -208
  609. package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +0 -344
@@ -44,7 +44,7 @@ export {
44
44
  type UnannotateAllowedTypesList,
45
45
  type AllowedTypeMetadata,
46
46
  type AnnotatedAllowedTypes,
47
- type SchemaUpgrade,
47
+ SchemaUpgrade,
48
48
  type LazyItem,
49
49
  type FlexList,
50
50
  type FlexListToUnion,
@@ -59,6 +59,8 @@ export {
59
59
  type AllowedTypesFullFromMixed,
60
60
  AnnotatedAllowedTypesInternal,
61
61
  type NumberKeys,
62
+ ExpectStored,
63
+ createSchemaUpgrade,
62
64
  } from "./core/index.js";
63
65
  export { walkFieldSchema } from "./walkFieldSchema.js";
64
66
  export type { UnsafeUnknownSchema, Insertable } from "./unsafeUnknownSchema.js";
@@ -283,4 +285,7 @@ export type { LeafSchema } from "./leafNodeSchema.js";
283
285
  export {
284
286
  encodeSimpleSchema,
285
287
  decodeSimpleSchema,
288
+ exportCompatibilitySchemaSnapshot,
289
+ importCompatibilitySchemaSnapshot,
290
+ checkCompatibility,
286
291
  } from "./api/index.js";
@@ -7,7 +7,7 @@ import { assert } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
  import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
9
9
 
10
- import { LeafNodeStoredSchema, type TreeValue, ValueSchema } from "../core/index.js";
10
+ import { type TreeValue, ValueSchema } from "../core/index.js";
11
11
  import {
12
12
  type FlexTreeNode,
13
13
  isFlexTreeNode,
@@ -64,7 +64,6 @@ export class LeafNodeSchema<Name extends string, const T extends ValueSchema>
64
64
  ): FlexContent => leafToFlexContent(data, this, allowedTypes),
65
65
  })),
66
66
  childAllowedTypes: [],
67
- toStored: () => new LeafNodeStoredSchema(this.leafKind),
68
67
  };
69
68
  #initializedData: TreeNodeSchemaInitializedData | undefined;
70
69
 
@@ -45,7 +45,6 @@ import {
45
45
  createTreeNodeSchemaPrivateData,
46
46
  type FlexContent,
47
47
  type TreeNodeSchemaPrivateData,
48
- convertAllowedTypes,
49
48
  withBufferedTreeEvents,
50
49
  AnnotatedAllowedTypesInternal,
51
50
  } from "../../core/index.js";
@@ -66,9 +65,13 @@ import type {
66
65
  ArrayNodePojoEmulationSchema,
67
66
  ArrayNodeSchema,
68
67
  } from "./arrayNodeTypes.js";
69
- import { brand, type JsonCompatibleReadOnlyObject } from "../../../util/index.js";
68
+ import {
69
+ brand,
70
+ validateIndex,
71
+ validateIndexRange,
72
+ type JsonCompatibleReadOnlyObject,
73
+ } from "../../../util/index.js";
70
74
  import { nullSchema } from "../../leafNodeSchema.js";
71
- import { arrayNodeStoredSchema } from "../../toStoredSchema.js";
72
75
  import type { SimpleAllowedTypeAttributes } from "../../simpleSchema.js";
73
76
 
74
77
  /**
@@ -951,7 +954,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
951
954
  }
952
955
  public insertAt(index: number, ...value: Insertable<T>): void {
953
956
  const field = getSequenceField(this);
954
- validateIndex(index, field, "insertAt", true);
957
+ validateIndex(index, field, "TreeArrayNode.insertAt", true);
955
958
  const content = this.#mapTreesFromFieldData(value);
956
959
  field.editor.insert(index, content);
957
960
  }
@@ -963,32 +966,30 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
963
966
  }
964
967
  public removeAt(index: number): void {
965
968
  const field = getSequenceField(this);
966
- validateIndex(index, field, "removeAt");
969
+ validateIndex(index, field, "TreeArrayNode.removeAt");
967
970
  field.editor.remove(index, 1);
968
971
  }
969
972
  public removeRange(start?: number, end?: number): void {
970
973
  const field = getSequenceField(this);
971
974
  const { length } = field;
972
975
  const removeStart = start ?? 0;
976
+ validateIndex(removeStart, field, "TreeArrayNode.removeRange", true);
977
+
973
978
  const removeEnd = Math.min(length, end ?? length);
974
- validatePositiveIndex(removeStart);
975
- validatePositiveIndex(removeEnd);
976
- if (removeEnd < removeStart) {
977
- // This catches both the case where start is > array.length and when start is > end.
978
- throw new UsageError('Too large of "start" value passed to TreeArrayNode.removeRange.');
979
- }
979
+ validateIndexRange(removeStart, removeEnd, field, "TreeArrayNode.removeRange");
980
+
980
981
  field.editor.remove(removeStart, removeEnd - removeStart);
981
982
  }
982
983
  public moveToStart(sourceIndex: number, source?: ReadonlyArrayNode): void {
983
984
  const sourceArray = source ?? this;
984
985
  const sourceField = getSequenceField(sourceArray);
985
- validateIndex(sourceIndex, sourceField, "moveToStart");
986
+ validateIndex(sourceIndex, sourceField, "TreeArrayNode.moveToStart");
986
987
  this.moveRangeToIndex(0, sourceIndex, sourceIndex + 1, source);
987
988
  }
988
989
  public moveToEnd(sourceIndex: number, source?: ReadonlyArrayNode): void {
989
990
  const sourceArray = source ?? this;
990
991
  const sourceField = getSequenceField(sourceArray);
991
- validateIndex(sourceIndex, sourceField, "moveToEnd");
992
+ validateIndex(sourceIndex, sourceField, "TreeArrayNode.moveToEnd");
992
993
  this.moveRangeToIndex(this.length, sourceIndex, sourceIndex + 1, source);
993
994
  }
994
995
  public moveToIndex(
@@ -999,8 +1000,8 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
999
1000
  const sourceArray = source ?? this;
1000
1001
  const sourceField = getSequenceField(sourceArray);
1001
1002
  const destinationField = getSequenceField(this);
1002
- validateIndex(destinationGap, destinationField, "moveToIndex", true);
1003
- validateIndex(sourceIndex, sourceField, "moveToIndex");
1003
+ validateIndex(destinationGap, destinationField, "TreeArrayNode.moveToIndex", true);
1004
+ validateIndex(sourceIndex, sourceField, "TreeArrayNode.moveToIndex");
1004
1005
  this.moveRangeToIndex(destinationGap, sourceIndex, sourceIndex + 1, source);
1005
1006
  }
1006
1007
  public moveRangeToStart(
@@ -1012,7 +1013,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
1012
1013
  sourceStart,
1013
1014
  sourceEnd,
1014
1015
  source ?? getSequenceField(this),
1015
- "moveRangeToStart",
1016
+ "TreeArrayNode.moveRangeToStart",
1016
1017
  );
1017
1018
  this.moveRangeToIndex(0, sourceStart, sourceEnd, source);
1018
1019
  }
@@ -1025,7 +1026,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
1025
1026
  sourceStart,
1026
1027
  sourceEnd,
1027
1028
  source ?? getSequenceField(this),
1028
- "moveRangeToEnd",
1029
+ "TreeArrayNode.moveRangeToEnd",
1029
1030
  );
1030
1031
  this.moveRangeToIndex(this.length, sourceStart, sourceEnd, source);
1031
1032
  }
@@ -1044,8 +1045,13 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
1044
1045
  ).getFieldSchema(EmptyKey).types;
1045
1046
  const sourceField = source !== undefined ? getSequenceField(source) : destinationField;
1046
1047
 
1047
- validateIndex(destinationGap, destinationField, "moveRangeToIndex", true);
1048
- validateIndexRange(sourceStart, sourceEnd, source ?? destinationField, "moveRangeToIndex");
1048
+ validateIndex(destinationGap, destinationField, "TreeArrayNode.moveRangeToIndex", true);
1049
+ validateIndexRange(
1050
+ sourceStart,
1051
+ sourceEnd,
1052
+ source ?? destinationField,
1053
+ "TreeArrayNode.moveRangeToIndex",
1054
+ );
1049
1055
 
1050
1056
  // TODO: determine support for move across different sequence types
1051
1057
  if (sourceField !== destinationField) {
@@ -1282,12 +1288,7 @@ export function arraySchema<
1282
1288
  }
1283
1289
 
1284
1290
  public static get [privateDataSymbol](): TreeNodeSchemaPrivateData {
1285
- return (privateData ??= createTreeNodeSchemaPrivateData(
1286
- this,
1287
- [normalizedTypes],
1288
- (storedOptions) =>
1289
- arrayNodeStoredSchema(convertAllowedTypes(info, storedOptions), persistedMetadata),
1290
- ));
1291
+ return (privateData ??= createTreeNodeSchemaPrivateData(this, [normalizedTypes]));
1291
1292
  }
1292
1293
  }
1293
1294
 
@@ -1295,56 +1296,6 @@ export function arraySchema<
1295
1296
  return output;
1296
1297
  }
1297
1298
 
1298
- function validateSafeInteger(index: number): void {
1299
- if (!Number.isSafeInteger(index)) {
1300
- throw new UsageError(`Expected a safe integer, got ${index}.`);
1301
- }
1302
- }
1303
-
1304
- function validatePositiveIndex(index: number): void {
1305
- validateSafeInteger(index);
1306
- if (index < 0) {
1307
- throw new UsageError(`Expected non-negative index, got ${index}.`);
1308
- }
1309
- }
1310
-
1311
- function validateIndex(
1312
- index: number,
1313
- array: { readonly length: number },
1314
- methodName: string,
1315
- allowOnePastEnd: boolean = false,
1316
- ): void {
1317
- validatePositiveIndex(index);
1318
- if (allowOnePastEnd) {
1319
- if (index > array.length) {
1320
- throw new UsageError(
1321
- `Index value passed to TreeArrayNode.${methodName} is out of bounds.`,
1322
- );
1323
- }
1324
- } else {
1325
- if (index >= array.length) {
1326
- throw new UsageError(
1327
- `Index value passed to TreeArrayNode.${methodName} is out of bounds.`,
1328
- );
1329
- }
1330
- }
1331
- }
1332
-
1333
- function validateIndexRange(
1334
- startIndex: number,
1335
- endIndex: number,
1336
- array: { readonly length: number },
1337
- methodName: string,
1338
- ): void {
1339
- validateIndex(startIndex, array, methodName, true);
1340
- validateIndex(endIndex, array, methodName, true);
1341
- if (startIndex > endIndex || array.length < endIndex) {
1342
- throw new UsageError(
1343
- `Index value passed to TreeArrayNode.${methodName} is out of bounds.`,
1344
- );
1345
- }
1346
- }
1347
-
1348
1299
  /**
1349
1300
  * Transforms data for a child of an array.
1350
1301
  * @param child - The tree data to be transformed.
@@ -7,7 +7,6 @@ import { assert, Lazy } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
9
  import {
10
- FieldKinds,
11
10
  isTreeValue,
12
11
  type FlexibleNodeContent,
13
12
  type FlexTreeNode,
@@ -42,7 +41,6 @@ import {
42
41
  createTreeNodeSchemaPrivateData,
43
42
  type FlexContent,
44
43
  type TreeNodeSchemaPrivateData,
45
- convertAllowedTypes,
46
44
  AnnotatedAllowedTypesInternal,
47
45
  } from "../../core/index.js";
48
46
  import {
@@ -343,19 +341,7 @@ export function mapSchema<
343
341
  }
344
342
 
345
343
  public static get [privateDataSymbol](): TreeNodeSchemaPrivateData {
346
- return (privateData ??= createTreeNodeSchemaPrivateData(
347
- this,
348
- [normalizedTypes],
349
- (storedOptions) =>
350
- new MapNodeStoredSchema(
351
- {
352
- kind: FieldKinds.optional.identifier,
353
- types: convertAllowedTypes(info, storedOptions),
354
- persistedMetadata,
355
- },
356
- persistedMetadata,
357
- ),
358
- ));
344
+ return (privateData ??= createTreeNodeSchemaPrivateData(this, [normalizedTypes]));
359
345
  }
360
346
  }
361
347
  const schemaErased: MapNodeCustomizableSchema<
@@ -86,7 +86,7 @@ import {
86
86
  type FactoryContentObject,
87
87
  type InsertableContent,
88
88
  } from "../../unhydratedFlexTreeFromInsertable.js";
89
- import { convertField, convertFieldKind } from "../../toStoredSchema.js";
89
+ import { convertFieldKind } from "../../toStoredSchema.js";
90
90
  import type { ObjectSchemaOptionsAlpha } from "../../api/index.js";
91
91
 
92
92
  /**
@@ -585,20 +585,6 @@ export function objectSchema<
585
585
  return (privateData ??= createTreeNodeSchemaPrivateData(
586
586
  this,
587
587
  Array.from(CustomObjectNode.fields.values(), (schema) => schema.allowedTypesFull),
588
- (storedOptions) => {
589
- const fields: Map<FieldKey, TreeFieldStoredSchema> = new Map();
590
- for (const fieldSchema of flexKeyMap.values()) {
591
- assert(
592
- fieldSchema.schema instanceof FieldSchemaAlpha,
593
- 0xc19 /* Expected FieldSchemaAlpha */,
594
- );
595
- fields.set(
596
- brand(fieldSchema.storedKey),
597
- convertField(fieldSchema.schema, storedOptions),
598
- );
599
- }
600
- return new ObjectNodeStoredSchema(fields, nodeOptions.persistedMetadata);
601
- },
602
588
  ));
603
589
  }
604
590
  }
@@ -650,9 +636,8 @@ function assertUniqueKeys<
650
636
  }
651
637
 
652
638
  /**
653
- * {@link TreeNodeSchemaInitializedData.toFlexContent} for Map nodes.
639
+ * {@link TreeNodeSchemaInitializedData.toFlexContent} for object nodes.
654
640
  *
655
- * Transforms data under an Object schema.
656
641
  * @param data - The tree data to be transformed. Must be a Record-like object.
657
642
  * @param schema - The schema to comply with.
658
643
  */
@@ -31,7 +31,6 @@ import {
31
31
  type FlexContent,
32
32
  CompatibilityLevel,
33
33
  type TreeNodeSchemaPrivateData,
34
- convertAllowedTypes,
35
34
  AnnotatedAllowedTypesInternal,
36
35
  } from "../../core/index.js";
37
36
  import { getTreeNodeSchemaInitializedData } from "../../createContext.js";
@@ -50,7 +49,6 @@ import type {
50
49
  TreeRecordNode,
51
50
  } from "./recordNodeTypes.js";
52
51
  import {
53
- FieldKinds,
54
52
  isTreeValue,
55
53
  type FlexTreeNode,
56
54
  type FlexTreeOptionalField,
@@ -388,19 +386,7 @@ export function recordSchema<
388
386
  }
389
387
 
390
388
  public static get [privateDataSymbol](): TreeNodeSchemaPrivateData {
391
- return (privateData ??= createTreeNodeSchemaPrivateData(
392
- this,
393
- [normalizedTypes],
394
- (storedOptions) =>
395
- new MapNodeStoredSchema(
396
- {
397
- kind: FieldKinds.optional.identifier,
398
- types: convertAllowedTypes(info, storedOptions),
399
- persistedMetadata,
400
- },
401
- persistedMetadata,
402
- ),
403
- ));
389
+ return (privateData ??= createTreeNodeSchemaPrivateData(this, [normalizedTypes]));
404
390
  }
405
391
  }
406
392
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  import type { ValueSchema } from "../core/index.js";
7
7
  import type { JsonCompatibleReadOnlyObject } from "../util/index.js";
8
- import type { NodeKind, SimpleNodeSchemaBase } from "./core/index.js";
8
+ import type { NodeKind, SchemaUpgrade, SimpleNodeSchemaBase } from "./core/index.js";
9
9
  import type { FieldKind, FieldSchemaMetadata } from "./fieldSchema.js";
10
10
 
11
11
  /*
@@ -39,6 +39,15 @@ export interface SimpleNodeSchemaBaseAlpha<
39
39
  readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined;
40
40
  }
41
41
 
42
+ /**
43
+ * {@link AllowedTypes} for a location in the tree, expressed for use in the Simple Schema layer of abstraction.
44
+ *
45
+ * @remarks
46
+ * Refers to the types by identifier.
47
+ * A {@link SimpleTreeSchema} is needed to resolve these identifiers to their schema {@link SimpleTreeSchema.definitions}.
48
+ */
49
+ export type SimpleAllowedTypes = ReadonlyMap<string, SimpleAllowedTypeAttributes>;
50
+
42
51
  /**
43
52
  * A {@link SimpleNodeSchema} for an object node.
44
53
  *
@@ -179,13 +188,17 @@ export type SimpleNodeSchema =
179
188
  */
180
189
  export interface SimpleAllowedTypeAttributes {
181
190
  /**
182
- * True if this schema is included as a {@link SchemaStaticsBeta.staged | staged} schema upgrade,
191
+ * {@link SchemaUpgrade} if this schema is included as a {@link SchemaStaticsBeta.staged | staged} schema upgrade,
183
192
  * allowing the view schema be compatible with stored schema with (post upgrade) or without it (pre-upgrade).
184
193
  * New documents and schema upgrades will omit any staged schema.
185
194
  *
186
195
  * Undefined if derived from a stored schema.
196
+ *
197
+ * @privateRemarks
198
+ * The false and undefined cases here are a bit odd.
199
+ * This API should be reevaluated before stabilizing.
187
200
  */
188
- readonly isStaged: boolean | undefined;
201
+ readonly isStaged: false | SchemaUpgrade | undefined;
189
202
  }
190
203
 
191
204
  /**
@@ -3,7 +3,11 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { unreachableCase, fail } from "@fluidframework/core-utils/internal";
6
+ import {
7
+ unreachableCase,
8
+ fail,
9
+ transformMapValues,
10
+ } from "@fluidframework/core-utils/internal";
7
11
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
12
 
9
13
  import {
@@ -17,7 +21,6 @@ import {
17
21
  type TreeNodeSchemaIdentifier,
18
22
  type TreeNodeStoredSchema,
19
23
  type TreeStoredSchema,
20
- type TreeTypeSet,
21
24
  } from "../core/index.js";
22
25
  import { FieldKinds, type FlexFieldKind } from "../feature-libraries/index.js";
23
26
  import { brand, getOrCreate, type JsonCompatibleReadOnlyObject } from "../util/index.js";
@@ -25,23 +28,23 @@ import { brand, getOrCreate, type JsonCompatibleReadOnlyObject } from "../util/i
25
28
  import {
26
29
  allowedTypeFilter,
27
30
  convertAllowedTypes,
28
- getTreeNodeSchemaPrivateData,
29
- isClassBasedSchema,
31
+ ExpectStored,
30
32
  NodeKind,
31
33
  type SimpleNodeSchemaBase,
34
+ type StoredFromViewSchemaGenerationOptions,
32
35
  type StoredSchemaGenerationOptions,
33
36
  } from "./core/index.js";
34
- import {
35
- FieldKind,
36
- FieldSchemaAlpha,
37
- normalizeFieldSchema,
38
- type ImplicitFieldSchema,
39
- } from "./fieldSchema.js";
40
- import type { SimpleFieldSchema, SimpleNodeSchema } from "./simpleSchema.js";
37
+ import { FieldKind, normalizeFieldSchema, type ImplicitFieldSchema } from "./fieldSchema.js";
38
+ import type {
39
+ SimpleAllowedTypes,
40
+ SimpleFieldSchema,
41
+ SimpleNodeSchema,
42
+ SimpleTreeSchema,
43
+ } from "./simpleSchema.js";
41
44
  import { walkFieldSchema } from "./walkFieldSchema.js";
42
45
 
43
46
  const viewToStoredCache = new WeakMap<
44
- StoredSchemaGenerationOptions,
47
+ StoredFromViewSchemaGenerationOptions,
45
48
  WeakMap<ImplicitFieldSchema, TreeStoredSchema>
46
49
  >();
47
50
 
@@ -85,6 +88,9 @@ export const toUnhydratedSchema = permissiveStoredSchemaGenerationOptions;
85
88
  * TODO:#38722 When runtime schema upgrades are implemented, this will need to be updated to check if
86
89
  * a staged allowed type has been upgraded and if so, include it in the conversion.
87
90
  *
91
+ * Even if this took in a SimpleTreeSchema,
92
+ * it would still need to walk the schema to avoid including schema that become unreachable due to filtered out staged schema.
93
+ *
88
94
  * @throws
89
95
  * Throws a `UsageError` if multiple schemas are encountered with the same identifier.
90
96
  */
@@ -114,7 +120,11 @@ export function toStoredSchema(
114
120
  ),
115
121
  );
116
122
  },
117
- allowedTypeFilter: (allowedType) => allowedTypeFilter(allowedType, options),
123
+ allowedTypeFilter: (allowedType) =>
124
+ allowedTypeFilter(
125
+ { isStaged: allowedType.metadata.stagedSchemaUpgrade ?? false },
126
+ options,
127
+ ),
118
128
  });
119
129
 
120
130
  const result: TreeStoredSchema = {
@@ -126,24 +136,35 @@ export function toStoredSchema(
126
136
  }
127
137
 
128
138
  /**
129
- * Normalizes an {@link ImplicitFieldSchema} into a {@link TreeFieldSchema}.
139
+ * Convert a {@link SimpleTreeSchema} for a stored schema into a {@link TreeStoredSchema}.
140
+ * @remarks
141
+ * This only supports simple schemas that are already logically stored schemas.
142
+ * @privateRemarks
143
+ * To correctly support view schema here, this would need to filter out unreferenced schema after excluding staged schema.
144
+ * @see {@link ExpectStored}.
145
+ */
146
+ export function simpleStoredSchemaToStoredSchema(
147
+ treeSchema: SimpleTreeSchema,
148
+ ): TreeStoredSchema {
149
+ const result: TreeStoredSchema = {
150
+ nodeSchema: transformMapValues(treeSchema.definitions, (schema) =>
151
+ getStoredSchema(schema, ExpectStored),
152
+ ) as Map<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
153
+ rootFieldSchema: convertField(treeSchema.root, ExpectStored),
154
+ };
155
+ return result;
156
+ }
157
+
158
+ /**
159
+ * Convert a {@link SimpleFieldSchema} into a {@link TreeFieldStoredSchema}.
130
160
  */
131
161
  export function convertField(
132
- schema: SimpleFieldSchema | FieldSchemaAlpha,
162
+ schema: SimpleFieldSchema,
133
163
  options: StoredSchemaGenerationOptions,
134
164
  ): TreeFieldStoredSchema {
135
165
  const kind: FieldKindIdentifier =
136
166
  convertFieldKind.get(schema.kind)?.identifier ?? fail(0xae3 /* Invalid field kind */);
137
- let types: TreeTypeSet;
138
- // eslint-disable-next-line unicorn/prefer-ternary
139
- if (schema instanceof FieldSchemaAlpha) {
140
- types = convertAllowedTypes(schema.allowedTypes, options);
141
- } else {
142
- const allowedTypesIdentifiers: ReadonlySet<string> = new Set(
143
- schema.simpleAllowedTypes.keys(),
144
- );
145
- types = allowedTypesIdentifiers as TreeTypeSet;
146
- }
167
+ const types = convertAllowedTypes(schema.simpleAllowedTypes, options);
147
168
  return { kind, types, persistedMetadata: schema.persistedMetadata };
148
169
  }
149
170
 
@@ -168,9 +189,6 @@ export function getStoredSchema(
168
189
  schema: SimpleNodeSchema,
169
190
  options: StoredSchemaGenerationOptions,
170
191
  ): TreeNodeStoredSchema {
171
- if (isClassBasedSchema(schema)) {
172
- return getTreeNodeSchemaPrivateData(schema).toStored(options);
173
- }
174
192
  const kind = schema.kind;
175
193
  switch (kind) {
176
194
  case NodeKind.Leaf: {
@@ -178,10 +196,7 @@ export function getStoredSchema(
178
196
  }
179
197
  case NodeKind.Map:
180
198
  case NodeKind.Record: {
181
- const allowedTypesIdentifiers: ReadonlySet<string> = new Set(
182
- schema.simpleAllowedTypes.keys(),
183
- );
184
- const types = allowedTypesIdentifiers as TreeTypeSet;
199
+ const types = convertAllowedTypes(schema.simpleAllowedTypes, options);
185
200
  return new MapNodeStoredSchema(
186
201
  {
187
202
  kind: FieldKinds.optional.identifier,
@@ -193,11 +208,11 @@ export function getStoredSchema(
193
208
  );
194
209
  }
195
210
  case NodeKind.Array: {
196
- const allowedTypesIdentifiers: ReadonlySet<string> = new Set(
197
- schema.simpleAllowedTypes.keys(),
211
+ return arrayNodeStoredSchema(
212
+ schema.simpleAllowedTypes,
213
+ options,
214
+ schema.persistedMetadata,
198
215
  );
199
- const types = allowedTypesIdentifiers as TreeTypeSet;
200
- return arrayNodeStoredSchema(types, schema.persistedMetadata);
201
216
  }
202
217
  case NodeKind.Object: {
203
218
  const fields: Map<FieldKey, TreeFieldStoredSchema> = new Map();
@@ -213,12 +228,13 @@ export function getStoredSchema(
213
228
  }
214
229
 
215
230
  export function arrayNodeStoredSchema(
216
- types: TreeTypeSet,
231
+ schema: SimpleAllowedTypes,
232
+ options: StoredSchemaGenerationOptions,
217
233
  persistedMetadata: JsonCompatibleReadOnlyObject | undefined,
218
234
  ): ObjectNodeStoredSchema {
219
235
  const field = {
220
236
  kind: FieldKinds.sequence.identifier,
221
- types,
237
+ types: convertAllowedTypes(schema, options),
222
238
  persistedMetadata,
223
239
  };
224
240
  const fields = new Map([[EmptyKey, field]]);
@@ -5,9 +5,9 @@
5
5
 
6
6
  import type { IFluidHandle } from "@fluidframework/core-interfaces";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
- import { assert } from "@fluidframework/core-utils/internal";
8
+ import { assert, fail } from "@fluidframework/core-utils/internal";
9
9
 
10
- import { hasSingle } from "../util/index.js";
10
+ import { filterIterable, hasSingle, oneFromIterable } from "../util/index.js";
11
11
 
12
12
  import { normalizeFieldSchema, FieldKind, type ImplicitFieldSchema } from "./fieldSchema.js";
13
13
  import {
@@ -96,7 +96,13 @@ export function unhydratedFlexTreeFromInsertableNode(
96
96
  const handler = getTreeNodeSchemaPrivateData(schema).idempotentInitialize();
97
97
  const result = handler.toFlexContent(data, allowedTypes);
98
98
 
99
- return new UnhydratedFlexTreeNode(...result, getUnhydratedContext(schema));
99
+ // Might not match schema due to fallbacks, see TODO on toFlexContent
100
+ // TODO: fix TODO in `toFlexContent`, and remove this.
101
+ const finalSchema =
102
+ oneFromIterable(filterIterable(allowedTypes, (s) => s.identifier === result[0].type)) ??
103
+ fail(0xc9d /* missing schema */);
104
+
105
+ return new UnhydratedFlexTreeNode(...result, getUnhydratedContext(finalSchema));
100
106
  }
101
107
 
102
108
  function getType(
@@ -133,21 +139,20 @@ export function getPossibleTypes(
133
139
  data: FactoryContent,
134
140
  ): TreeNodeSchema[] {
135
141
  assert(data !== undefined, 0x889 /* undefined cannot be used as FactoryContent. */);
136
- const type =
137
- typeof data === "object" && data !== null
138
- ? (data as Partial<{ [contentSchemaSymbol]: string }>)[contentSchemaSymbol]
139
- : undefined;
140
142
 
141
- let best = CompatibilityLevel.None;
143
+ let toCheck: Iterable<TreeNodeSchema>;
144
+ if (typeof data === "object" && data !== null && contentSchemaSymbol in data) {
145
+ // If the data has an explicit brand via contentSchemaSymbol, only check that type.
146
+ const type = data[contentSchemaSymbol];
147
+ toCheck = filterIterable(allowedTypes, (schema) => schema.identifier === type);
148
+ } else {
149
+ toCheck = allowedTypes;
150
+ }
151
+
152
+ // Start at the lowest level of compat we would ever accept: this discards types which are less compatible.
153
+ let best = CompatibilityLevel.Low;
142
154
  const possibleTypes: TreeNodeSchema[] = [];
143
- for (const schema of allowedTypes) {
144
- if (type !== undefined) {
145
- if (schema.identifier === type) {
146
- return [schema];
147
- } else {
148
- continue;
149
- }
150
- }
155
+ for (const schema of toCheck) {
151
156
  const handler = getTreeNodeSchemaPrivateData(schema).idempotentInitialize();
152
157
  const level = handler.shallowCompatibilityTest(data);
153
158
  if (level > best) {
@@ -158,7 +163,7 @@ export function getPossibleTypes(
158
163
  possibleTypes.push(schema);
159
164
  }
160
165
  }
161
- return best === CompatibilityLevel.None ? [] : possibleTypes;
166
+ return possibleTypes;
162
167
  }
163
168
 
164
169
  /**