@fluidframework/tree 2.72.0 → 2.74.0-365691

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 (696) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/api-report/tree.alpha.api.md +32 -31
  3. package/dist/alpha.d.ts +7 -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 +3 -3
  40. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  41. package/dist/feature-libraries/chunked-forest/codec/codecs.js +32 -18
  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/incrementalEncodingPolicy.d.ts +2 -2
  56. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -1
  58. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  59. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/codec/index.js +2 -1
  61. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  62. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +13 -13
  63. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  64. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +23 -6
  65. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  66. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.d.ts +9 -8
  67. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.d.ts.map +1 -1
  68. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +20 -4
  69. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  70. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  71. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  72. package/dist/feature-libraries/chunked-forest/index.js +2 -1
  73. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  74. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +35 -17
  75. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  76. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +53 -55
  77. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  78. package/dist/feature-libraries/default-schema/index.d.ts +1 -3
  79. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  80. package/dist/feature-libraries/default-schema/index.js +2 -8
  81. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  82. package/dist/feature-libraries/forest-summary/forestSummarizer.js +1 -1
  83. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  84. package/dist/feature-libraries/forest-summary/format.d.ts +2 -2
  85. package/dist/feature-libraries/forest-summary/format.d.ts.map +1 -1
  86. package/dist/feature-libraries/forest-summary/format.js +4 -2
  87. package/dist/feature-libraries/forest-summary/format.js.map +1 -1
  88. package/dist/feature-libraries/index.d.ts +5 -4
  89. package/dist/feature-libraries/index.d.ts.map +1 -1
  90. package/dist/feature-libraries/index.js +8 -8
  91. package/dist/feature-libraries/index.js.map +1 -1
  92. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  93. package/dist/feature-libraries/modular-schema/comparison.js +1 -2
  94. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  95. package/dist/feature-libraries/modular-schema/fieldKind.d.ts +38 -12
  96. package/dist/feature-libraries/modular-schema/fieldKind.d.ts.map +1 -1
  97. package/dist/feature-libraries/modular-schema/fieldKind.js +29 -11
  98. package/dist/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  99. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.d.ts +2 -2
  100. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  101. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  102. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +2 -2
  103. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  104. package/dist/feature-libraries/modular-schema/genericFieldKind.js +3 -2
  105. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  106. package/dist/feature-libraries/modular-schema/index.d.ts +0 -1
  107. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  108. package/dist/feature-libraries/modular-schema/index.js +1 -3
  109. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  110. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts +5 -6
  111. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  112. package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  113. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  114. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  115. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  116. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -8
  117. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  118. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1 -2
  119. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  120. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +66 -9
  121. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  122. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  123. package/dist/feature-libraries/object-forest/objectForest.js +3 -2
  124. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  125. package/dist/feature-libraries/optional-field/index.d.ts +1 -1
  126. package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
  127. package/dist/feature-libraries/optional-field/index.js.map +1 -1
  128. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  129. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  130. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  131. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  132. package/dist/feature-libraries/schema-index/codec.js +5 -3
  133. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  134. package/dist/feature-libraries/{default-schema/schemaChecker.d.ts → schemaChecker.d.ts} +2 -2
  135. package/dist/feature-libraries/schemaChecker.d.ts.map +1 -0
  136. package/dist/feature-libraries/{default-schema/schemaChecker.js → schemaChecker.js} +3 -3
  137. package/dist/feature-libraries/schemaChecker.js.map +1 -0
  138. package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  139. package/dist/feature-libraries/sequence-field/formatV2.js +1 -0
  140. package/dist/feature-libraries/sequence-field/formatV2.js.map +1 -1
  141. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  142. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js +0 -2
  143. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  144. package/dist/feature-libraries/treeCompressionUtils.d.ts +2 -12
  145. package/dist/feature-libraries/treeCompressionUtils.d.ts.map +1 -1
  146. package/dist/feature-libraries/treeCompressionUtils.js +4 -14
  147. package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
  148. package/dist/index.d.ts +4 -4
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +8 -3
  151. package/dist/index.js.map +1 -1
  152. package/dist/packageVersion.d.ts +1 -1
  153. package/dist/packageVersion.d.ts.map +1 -1
  154. package/dist/packageVersion.js +1 -1
  155. package/dist/packageVersion.js.map +1 -1
  156. package/dist/shared-tree/index.d.ts +1 -1
  157. package/dist/shared-tree/index.d.ts.map +1 -1
  158. package/dist/shared-tree/index.js +1 -2
  159. package/dist/shared-tree/index.js.map +1 -1
  160. package/dist/shared-tree/sharedTree.d.ts +7 -54
  161. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  162. package/dist/shared-tree/sharedTree.js +2 -52
  163. package/dist/shared-tree/sharedTree.js.map +1 -1
  164. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  165. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  166. package/dist/shared-tree/sharedTreeChangeCodecs.js +0 -2
  167. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  168. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  169. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  170. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  171. package/dist/shared-tree/treeCheckout.d.ts +2 -2
  172. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  173. package/dist/shared-tree/treeCheckout.js.map +1 -1
  174. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  175. package/dist/shared-tree-core/editManagerCodecs.js +12 -6
  176. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  177. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +3 -4
  178. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  179. package/dist/shared-tree-core/editManagerFormatCommons.js +5 -8
  180. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  181. package/dist/shared-tree-core/index.d.ts +3 -3
  182. package/dist/shared-tree-core/index.d.ts.map +1 -1
  183. package/dist/shared-tree-core/index.js +3 -2
  184. package/dist/shared-tree-core/index.js.map +1 -1
  185. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  186. package/dist/shared-tree-core/messageCodecs.js +20 -9
  187. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  188. package/dist/shared-tree-core/messageFormat.d.ts +4 -6
  189. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  190. package/dist/shared-tree-core/messageFormat.js +9 -7
  191. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  192. package/dist/simple-tree/api/configuration.d.ts +2 -0
  193. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  194. package/dist/simple-tree/api/configuration.js +10 -0
  195. package/dist/simple-tree/api/configuration.js.map +1 -1
  196. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts +15 -12
  197. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
  198. package/dist/simple-tree/api/incrementalAllowedTypes.js +17 -14
  199. package/dist/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
  200. package/dist/simple-tree/api/index.d.ts +2 -1
  201. package/dist/simple-tree/api/index.d.ts.map +1 -1
  202. package/dist/simple-tree/api/index.js +6 -2
  203. package/dist/simple-tree/api/index.js.map +1 -1
  204. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  205. package/dist/simple-tree/api/schemaFromSimple.js +7 -1
  206. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  207. package/dist/simple-tree/api/simpleSchemaCodec.js +4 -6
  208. package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  209. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +103 -0
  210. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -0
  211. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +128 -0
  212. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -0
  213. package/dist/simple-tree/api/tree.d.ts +2 -2
  214. package/dist/simple-tree/api/tree.js +1 -1
  215. package/dist/simple-tree/api/tree.js.map +1 -1
  216. package/dist/simple-tree/core/allowedTypes.js +1 -1
  217. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  218. package/dist/simple-tree/core/index.d.ts +3 -3
  219. package/dist/simple-tree/core/index.d.ts.map +1 -1
  220. package/dist/simple-tree/core/index.js +3 -1
  221. package/dist/simple-tree/core/index.js.map +1 -1
  222. package/dist/simple-tree/core/toStored.d.ts +12 -5
  223. package/dist/simple-tree/core/toStored.d.ts.map +1 -1
  224. package/dist/simple-tree/core/toStored.js +26 -10
  225. package/dist/simple-tree/core/toStored.js.map +1 -1
  226. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  227. package/dist/simple-tree/core/treeNodeKernel.js +1 -0
  228. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  229. package/dist/simple-tree/core/treeNodeSchema.d.ts +1 -6
  230. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  231. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  232. package/dist/simple-tree/core/treeNodeValid.d.ts +1 -1
  233. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  234. package/dist/simple-tree/core/treeNodeValid.js +1 -2
  235. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  236. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  237. package/dist/simple-tree/fieldSchema.js +1 -8
  238. package/dist/simple-tree/fieldSchema.js.map +1 -1
  239. package/dist/simple-tree/index.d.ts +3 -3
  240. package/dist/simple-tree/index.d.ts.map +1 -1
  241. package/dist/simple-tree/index.js +10 -4
  242. package/dist/simple-tree/index.js.map +1 -1
  243. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  244. package/dist/simple-tree/leafNodeSchema.js +0 -1
  245. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  246. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  247. package/dist/simple-tree/node-kinds/array/arrayNode.js +14 -49
  248. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  249. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  250. package/dist/simple-tree/node-kinds/map/mapNode.js +1 -5
  251. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  252. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  253. package/dist/simple-tree/node-kinds/object/objectNode.js +3 -10
  254. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  255. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  256. package/dist/simple-tree/node-kinds/record/recordNode.js +1 -5
  257. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  258. package/dist/simple-tree/simpleSchema.d.ts +15 -3
  259. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  260. package/dist/simple-tree/simpleSchema.js.map +1 -1
  261. package/dist/simple-tree/toStoredSchema.d.ts +20 -8
  262. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  263. package/dist/simple-tree/toStoredSchema.js +27 -22
  264. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  265. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  266. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +18 -15
  267. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  268. package/dist/tableSchema.d.ts +22 -52
  269. package/dist/tableSchema.d.ts.map +1 -1
  270. package/dist/tableSchema.js +141 -277
  271. package/dist/tableSchema.js.map +1 -1
  272. package/dist/treeFactory.d.ts +5 -0
  273. package/dist/treeFactory.d.ts.map +1 -1
  274. package/dist/treeFactory.js +12 -5
  275. package/dist/treeFactory.js.map +1 -1
  276. package/dist/util/arrayUtilities.d.ts +45 -0
  277. package/dist/util/arrayUtilities.d.ts.map +1 -0
  278. package/dist/util/arrayUtilities.js +76 -0
  279. package/dist/util/arrayUtilities.js.map +1 -0
  280. package/dist/util/breakable.js +3 -3
  281. package/dist/util/breakable.js.map +1 -1
  282. package/dist/util/index.d.ts +1 -0
  283. package/dist/util/index.d.ts.map +1 -1
  284. package/dist/util/index.js +7 -2
  285. package/dist/util/index.js.map +1 -1
  286. package/dist/util/typeCheckTests.d.ts.map +1 -1
  287. package/dist/util/typeCheckTests.js.map +1 -1
  288. package/lib/alpha.d.ts +7 -1
  289. package/lib/api.d.ts +6 -2
  290. package/lib/api.d.ts.map +1 -1
  291. package/lib/api.js +2 -13
  292. package/lib/api.js.map +1 -1
  293. package/lib/codec/codec.d.ts +9 -2
  294. package/lib/codec/codec.d.ts.map +1 -1
  295. package/lib/codec/codec.js +9 -2
  296. package/lib/codec/codec.js.map +1 -1
  297. package/lib/codec/index.d.ts +1 -1
  298. package/lib/codec/index.d.ts.map +1 -1
  299. package/lib/codec/index.js +1 -1
  300. package/lib/codec/index.js.map +1 -1
  301. package/lib/codec/versioned/codec.d.ts +7 -2
  302. package/lib/codec/versioned/codec.d.ts.map +1 -1
  303. package/lib/codec/versioned/codec.js +22 -0
  304. package/lib/codec/versioned/codec.js.map +1 -1
  305. package/lib/codec/versioned/index.d.ts +1 -1
  306. package/lib/codec/versioned/index.d.ts.map +1 -1
  307. package/lib/codec/versioned/index.js +1 -1
  308. package/lib/codec/versioned/index.js.map +1 -1
  309. package/lib/core/schema-stored/schema.d.ts +12 -1
  310. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  311. package/lib/core/schema-stored/schema.js.map +1 -1
  312. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  313. package/lib/core/tree/detachedFieldIndexCodecs.js +5 -3
  314. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  315. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +4 -5
  316. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  317. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  318. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  319. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +2 -1
  320. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  321. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +2 -1
  322. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  323. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  324. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +3 -3
  325. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  326. package/lib/feature-libraries/chunked-forest/codec/codecs.js +36 -22
  327. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  328. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +6 -6
  329. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  330. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -2
  331. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  332. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +156 -4
  333. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  334. package/lib/feature-libraries/chunked-forest/codec/format.js +6 -2
  335. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  336. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.d.ts +8 -3
  337. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  338. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.js +4 -1
  339. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  340. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +2 -2
  341. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -1
  342. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -1
  343. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -1
  344. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  345. package/lib/feature-libraries/chunked-forest/codec/index.js +1 -1
  346. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  347. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +13 -13
  348. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  349. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -6
  350. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  351. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.d.ts +9 -8
  352. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.d.ts.map +1 -1
  353. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +17 -2
  354. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  355. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  356. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  357. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  358. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  359. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +35 -17
  360. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  361. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +55 -57
  362. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  363. package/lib/feature-libraries/default-schema/index.d.ts +1 -3
  364. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  365. package/lib/feature-libraries/default-schema/index.js +1 -3
  366. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  367. package/lib/feature-libraries/forest-summary/forestSummarizer.js +2 -2
  368. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  369. package/lib/feature-libraries/forest-summary/format.d.ts +2 -2
  370. package/lib/feature-libraries/forest-summary/format.d.ts.map +1 -1
  371. package/lib/feature-libraries/forest-summary/format.js +4 -2
  372. package/lib/feature-libraries/forest-summary/format.js.map +1 -1
  373. package/lib/feature-libraries/index.d.ts +5 -4
  374. package/lib/feature-libraries/index.d.ts.map +1 -1
  375. package/lib/feature-libraries/index.js +5 -4
  376. package/lib/feature-libraries/index.js.map +1 -1
  377. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  378. package/lib/feature-libraries/modular-schema/comparison.js +1 -2
  379. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  380. package/lib/feature-libraries/modular-schema/fieldKind.d.ts +38 -12
  381. package/lib/feature-libraries/modular-schema/fieldKind.d.ts.map +1 -1
  382. package/lib/feature-libraries/modular-schema/fieldKind.js +29 -11
  383. package/lib/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  384. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.d.ts +2 -2
  385. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  386. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  387. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +2 -2
  388. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  389. package/lib/feature-libraries/modular-schema/genericFieldKind.js +3 -2
  390. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  391. package/lib/feature-libraries/modular-schema/index.d.ts +0 -1
  392. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  393. package/lib/feature-libraries/modular-schema/index.js +0 -1
  394. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  395. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts +5 -6
  396. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  397. package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  398. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  399. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  400. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -1
  401. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  402. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -8
  403. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  404. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1 -2
  405. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  406. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +66 -9
  407. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  408. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  409. package/lib/feature-libraries/object-forest/objectForest.js +2 -1
  410. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  411. package/lib/feature-libraries/optional-field/index.d.ts +1 -1
  412. package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
  413. package/lib/feature-libraries/optional-field/index.js.map +1 -1
  414. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  415. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  416. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  417. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  418. package/lib/feature-libraries/schema-index/codec.js +5 -3
  419. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  420. package/lib/feature-libraries/{default-schema/schemaChecker.d.ts → schemaChecker.d.ts} +2 -2
  421. package/lib/feature-libraries/schemaChecker.d.ts.map +1 -0
  422. package/lib/feature-libraries/{default-schema/schemaChecker.js → schemaChecker.js} +3 -3
  423. package/lib/feature-libraries/schemaChecker.js.map +1 -0
  424. package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  425. package/lib/feature-libraries/sequence-field/formatV2.js +1 -0
  426. package/lib/feature-libraries/sequence-field/formatV2.js.map +1 -1
  427. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  428. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js +0 -2
  429. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  430. package/lib/feature-libraries/treeCompressionUtils.d.ts +2 -12
  431. package/lib/feature-libraries/treeCompressionUtils.d.ts.map +1 -1
  432. package/lib/feature-libraries/treeCompressionUtils.js +3 -13
  433. package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
  434. package/lib/index.d.ts +4 -4
  435. package/lib/index.d.ts.map +1 -1
  436. package/lib/index.js +3 -3
  437. package/lib/index.js.map +1 -1
  438. package/lib/packageVersion.d.ts +1 -1
  439. package/lib/packageVersion.d.ts.map +1 -1
  440. package/lib/packageVersion.js +1 -1
  441. package/lib/packageVersion.js.map +1 -1
  442. package/lib/shared-tree/index.d.ts +1 -1
  443. package/lib/shared-tree/index.d.ts.map +1 -1
  444. package/lib/shared-tree/index.js +1 -1
  445. package/lib/shared-tree/index.js.map +1 -1
  446. package/lib/shared-tree/sharedTree.d.ts +7 -54
  447. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  448. package/lib/shared-tree/sharedTree.js +1 -51
  449. package/lib/shared-tree/sharedTree.js.map +1 -1
  450. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  451. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  452. package/lib/shared-tree/sharedTreeChangeCodecs.js +0 -2
  453. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  454. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  455. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  456. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  457. package/lib/shared-tree/treeCheckout.d.ts +2 -2
  458. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  459. package/lib/shared-tree/treeCheckout.js.map +1 -1
  460. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  461. package/lib/shared-tree-core/editManagerCodecs.js +13 -7
  462. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  463. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +3 -4
  464. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  465. package/lib/shared-tree-core/editManagerFormatCommons.js +4 -7
  466. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  467. package/lib/shared-tree-core/index.d.ts +3 -3
  468. package/lib/shared-tree-core/index.d.ts.map +1 -1
  469. package/lib/shared-tree-core/index.js +2 -2
  470. package/lib/shared-tree-core/index.js.map +1 -1
  471. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  472. package/lib/shared-tree-core/messageCodecs.js +21 -10
  473. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  474. package/lib/shared-tree-core/messageFormat.d.ts +4 -6
  475. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  476. package/lib/shared-tree-core/messageFormat.js +8 -6
  477. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  478. package/lib/simple-tree/api/configuration.d.ts +2 -0
  479. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  480. package/lib/simple-tree/api/configuration.js +10 -0
  481. package/lib/simple-tree/api/configuration.js.map +1 -1
  482. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts +15 -12
  483. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
  484. package/lib/simple-tree/api/incrementalAllowedTypes.js +15 -12
  485. package/lib/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
  486. package/lib/simple-tree/api/index.d.ts +2 -1
  487. package/lib/simple-tree/api/index.d.ts.map +1 -1
  488. package/lib/simple-tree/api/index.js +2 -1
  489. package/lib/simple-tree/api/index.js.map +1 -1
  490. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  491. package/lib/simple-tree/api/schemaFromSimple.js +8 -2
  492. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  493. package/lib/simple-tree/api/simpleSchemaCodec.js +5 -7
  494. package/lib/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  495. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +103 -0
  496. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -0
  497. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +122 -0
  498. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -0
  499. package/lib/simple-tree/api/tree.d.ts +2 -2
  500. package/lib/simple-tree/api/tree.js +1 -1
  501. package/lib/simple-tree/api/tree.js.map +1 -1
  502. package/lib/simple-tree/core/allowedTypes.js +1 -1
  503. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  504. package/lib/simple-tree/core/index.d.ts +3 -3
  505. package/lib/simple-tree/core/index.d.ts.map +1 -1
  506. package/lib/simple-tree/core/index.js +2 -2
  507. package/lib/simple-tree/core/index.js.map +1 -1
  508. package/lib/simple-tree/core/toStored.d.ts +12 -5
  509. package/lib/simple-tree/core/toStored.d.ts.map +1 -1
  510. package/lib/simple-tree/core/toStored.js +25 -9
  511. package/lib/simple-tree/core/toStored.js.map +1 -1
  512. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  513. package/lib/simple-tree/core/treeNodeKernel.js +1 -0
  514. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  515. package/lib/simple-tree/core/treeNodeSchema.d.ts +1 -6
  516. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  517. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  518. package/lib/simple-tree/core/treeNodeValid.d.ts +1 -1
  519. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  520. package/lib/simple-tree/core/treeNodeValid.js +1 -2
  521. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  522. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  523. package/lib/simple-tree/fieldSchema.js +2 -9
  524. package/lib/simple-tree/fieldSchema.js.map +1 -1
  525. package/lib/simple-tree/index.d.ts +3 -3
  526. package/lib/simple-tree/index.d.ts.map +1 -1
  527. package/lib/simple-tree/index.js +3 -3
  528. package/lib/simple-tree/index.js.map +1 -1
  529. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  530. package/lib/simple-tree/leafNodeSchema.js +1 -2
  531. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  532. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  533. package/lib/simple-tree/node-kinds/array/arrayNode.js +16 -51
  534. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  535. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  536. package/lib/simple-tree/node-kinds/map/mapNode.js +3 -7
  537. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  538. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  539. package/lib/simple-tree/node-kinds/object/objectNode.js +4 -11
  540. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  541. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  542. package/lib/simple-tree/node-kinds/record/recordNode.js +3 -7
  543. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  544. package/lib/simple-tree/simpleSchema.d.ts +15 -3
  545. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  546. package/lib/simple-tree/simpleSchema.js.map +1 -1
  547. package/lib/simple-tree/toStoredSchema.d.ts +20 -8
  548. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  549. package/lib/simple-tree/toStoredSchema.js +28 -24
  550. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  551. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  552. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +20 -17
  553. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  554. package/lib/tableSchema.d.ts +22 -52
  555. package/lib/tableSchema.d.ts.map +1 -1
  556. package/lib/tableSchema.js +143 -279
  557. package/lib/tableSchema.js.map +1 -1
  558. package/lib/treeFactory.d.ts +5 -0
  559. package/lib/treeFactory.d.ts.map +1 -1
  560. package/lib/treeFactory.js +10 -4
  561. package/lib/treeFactory.js.map +1 -1
  562. package/lib/util/arrayUtilities.d.ts +45 -0
  563. package/lib/util/arrayUtilities.d.ts.map +1 -0
  564. package/lib/util/arrayUtilities.js +69 -0
  565. package/lib/util/arrayUtilities.js.map +1 -0
  566. package/lib/util/breakable.js +3 -3
  567. package/lib/util/breakable.js.map +1 -1
  568. package/lib/util/index.d.ts +1 -0
  569. package/lib/util/index.d.ts.map +1 -1
  570. package/lib/util/index.js +1 -0
  571. package/lib/util/index.js.map +1 -1
  572. package/lib/util/typeCheckTests.d.ts.map +1 -1
  573. package/lib/util/typeCheckTests.js.map +1 -1
  574. package/package.json +22 -22
  575. package/src/api.ts +22 -11
  576. package/src/codec/codec.ts +10 -2
  577. package/src/codec/index.ts +1 -0
  578. package/src/codec/versioned/codec.ts +40 -2
  579. package/src/codec/versioned/index.ts +1 -0
  580. package/src/core/schema-stored/schema.ts +12 -1
  581. package/src/core/tree/detachedFieldIndexCodecs.ts +10 -3
  582. package/src/feature-libraries/README.md +1 -1
  583. package/src/feature-libraries/chunked-forest/chunkTree.ts +3 -3
  584. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +5 -0
  585. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +2 -1
  586. package/src/feature-libraries/chunked-forest/codec/codecs.ts +55 -26
  587. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +8 -3
  588. package/src/feature-libraries/chunked-forest/codec/format.ts +14 -4
  589. package/src/feature-libraries/chunked-forest/codec/formatGeneric.ts +7 -2
  590. package/src/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.ts +5 -6
  591. package/src/feature-libraries/chunked-forest/codec/index.ts +1 -4
  592. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +62 -9
  593. package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +24 -2
  594. package/src/feature-libraries/chunked-forest/index.ts +1 -1
  595. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +86 -74
  596. package/src/feature-libraries/default-schema/index.ts +1 -9
  597. package/src/feature-libraries/forest-summary/forestSummarizer.ts +2 -2
  598. package/src/feature-libraries/forest-summary/format.ts +15 -9
  599. package/src/feature-libraries/index.ts +8 -10
  600. package/src/feature-libraries/modular-schema/comparison.ts +2 -3
  601. package/src/feature-libraries/modular-schema/fieldKind.ts +90 -13
  602. package/src/feature-libraries/modular-schema/fieldKindConfiguration.ts +2 -3
  603. package/src/feature-libraries/modular-schema/genericFieldKind.ts +6 -6
  604. package/src/feature-libraries/modular-schema/index.ts +0 -1
  605. package/src/feature-libraries/modular-schema/isNeverTree.ts +7 -8
  606. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +3 -6
  607. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +13 -13
  608. package/src/feature-libraries/object-forest/objectForest.ts +2 -6
  609. package/src/feature-libraries/optional-field/index.ts +1 -0
  610. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +1 -5
  611. package/src/feature-libraries/schema-index/codec.ts +10 -3
  612. package/src/feature-libraries/{default-schema/schemaChecker.ts → schemaChecker.ts} +4 -4
  613. package/src/feature-libraries/sequence-field/formatV2.ts +1 -0
  614. package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +0 -2
  615. package/src/feature-libraries/treeCompressionUtils.ts +1 -15
  616. package/src/index.ts +7 -1
  617. package/src/packageVersion.ts +1 -1
  618. package/src/shared-tree/index.ts +0 -1
  619. package/src/shared-tree/sharedTree.ts +12 -88
  620. package/src/shared-tree/sharedTreeChangeCodecs.ts +1 -6
  621. package/src/shared-tree/sharedTreeChangeFamily.ts +2 -2
  622. package/src/shared-tree/treeCheckout.ts +2 -2
  623. package/src/shared-tree-core/editManagerCodecs.ts +19 -7
  624. package/src/shared-tree-core/editManagerFormatCommons.ts +11 -12
  625. package/src/shared-tree-core/index.ts +7 -3
  626. package/src/shared-tree-core/messageCodecs.ts +32 -17
  627. package/src/shared-tree-core/messageFormat.ts +8 -6
  628. package/src/simple-tree/api/configuration.ts +17 -4
  629. package/src/simple-tree/api/incrementalAllowedTypes.ts +20 -18
  630. package/src/simple-tree/api/index.ts +6 -1
  631. package/src/simple-tree/api/schemaFromSimple.ts +14 -6
  632. package/src/simple-tree/api/simpleSchemaCodec.ts +10 -9
  633. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +135 -0
  634. package/src/simple-tree/api/tree.ts +2 -2
  635. package/src/simple-tree/core/allowedTypes.ts +1 -1
  636. package/src/simple-tree/core/index.ts +3 -1
  637. package/src/simple-tree/core/toStored.ts +42 -18
  638. package/src/simple-tree/core/treeNodeKernel.ts +1 -0
  639. package/src/simple-tree/core/treeNodeSchema.ts +1 -7
  640. package/src/simple-tree/core/treeNodeValid.ts +0 -2
  641. package/src/simple-tree/fieldSchema.ts +2 -11
  642. package/src/simple-tree/index.ts +7 -2
  643. package/src/simple-tree/leafNodeSchema.ts +1 -2
  644. package/src/simple-tree/node-kinds/array/arrayNode.ts +28 -75
  645. package/src/simple-tree/node-kinds/map/mapNode.ts +1 -15
  646. package/src/simple-tree/node-kinds/object/objectNode.ts +4 -18
  647. package/src/simple-tree/node-kinds/record/recordNode.ts +1 -15
  648. package/src/simple-tree/simpleSchema.ts +16 -3
  649. package/src/simple-tree/toStoredSchema.ts +54 -38
  650. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +22 -17
  651. package/src/tableSchema.ts +110 -334
  652. package/src/treeFactory.ts +13 -4
  653. package/src/util/arrayUtilities.ts +88 -0
  654. package/src/util/breakable.ts +4 -4
  655. package/src/util/index.ts +6 -0
  656. package/src/util/typeCheckTests.ts +0 -1
  657. package/dist/feature-libraries/default-schema/defaultSchema.d.ts +0 -10
  658. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +0 -1
  659. package/dist/feature-libraries/default-schema/defaultSchema.js +0 -15
  660. package/dist/feature-libraries/default-schema/defaultSchema.js.map +0 -1
  661. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +0 -1
  662. package/dist/feature-libraries/default-schema/schemaChecker.js.map +0 -1
  663. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.d.ts +0 -50
  664. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +0 -1
  665. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js +0 -76
  666. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js.map +0 -1
  667. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.d.ts +0 -12
  668. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.d.ts.map +0 -1
  669. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.js +0 -158
  670. package/dist/feature-libraries/optional-field/optionalFieldCodecV1.js.map +0 -1
  671. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +0 -11
  672. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +0 -1
  673. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +0 -245
  674. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +0 -1
  675. package/lib/feature-libraries/default-schema/defaultSchema.d.ts +0 -10
  676. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +0 -1
  677. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -12
  678. package/lib/feature-libraries/default-schema/defaultSchema.js.map +0 -1
  679. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +0 -1
  680. package/lib/feature-libraries/default-schema/schemaChecker.js.map +0 -1
  681. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.d.ts +0 -50
  682. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +0 -1
  683. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js +0 -71
  684. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js.map +0 -1
  685. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.d.ts +0 -12
  686. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.d.ts.map +0 -1
  687. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.js +0 -154
  688. package/lib/feature-libraries/optional-field/optionalFieldCodecV1.js.map +0 -1
  689. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +0 -11
  690. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +0 -1
  691. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +0 -241
  692. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +0 -1
  693. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -15
  694. package/src/feature-libraries/modular-schema/fieldKindWithEditor.ts +0 -108
  695. package/src/feature-libraries/optional-field/optionalFieldCodecV1.ts +0 -208
  696. package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +0 -344
@@ -18,22 +18,26 @@ import {
18
18
  type FieldEditor,
19
19
  type FieldKindConfiguration,
20
20
  type FieldKindConfigurationEntry,
21
- FieldKindWithEditor,
22
- type FlexFieldKind,
21
+ FlexFieldKind,
22
+ type FullSchemaPolicy,
23
23
  type ToDelta,
24
24
  allowsTreeSchemaIdentifierSuperset,
25
25
  referenceFreeFieldChangeRebaser,
26
26
  } from "../modular-schema/index.js";
27
27
  import {
28
28
  type OptionalChangeset,
29
+ type OptionalFieldEditor,
29
30
  optionalChangeHandler,
30
31
  optionalFieldEditor,
31
32
  } from "../optional-field/index.js";
32
- import { sequenceFieldChangeHandler } from "../sequence-field/index.js";
33
+ import {
34
+ sequenceFieldChangeHandler,
35
+ type SequenceFieldEditor,
36
+ } from "../sequence-field/index.js";
33
37
 
34
38
  import { noChangeCodecFamily } from "./noChangeCodecs.js";
35
39
  import type { CodecTree } from "../../codec/index.js";
36
- import { brand, type Brand } from "../../util/index.js";
40
+ import { brand, brandConst, type Brand } from "../../util/index.js";
37
41
 
38
42
  /**
39
43
  * ChangeHandler that only handles no-op / identity changes.
@@ -55,7 +59,15 @@ export const noChangeHandler: FieldChangeHandler<0> = {
55
59
  getCrossFieldKeys: () => [],
56
60
  };
57
61
 
58
- export interface ValueFieldEditor extends FieldEditor<OptionalChangeset> {
62
+ /**
63
+ * {@link FieldEditor} for required fields (always contain exactly 1 child).
64
+ * @remarks
65
+ * This shares code with optional fields, since they are the same edit wise except setting to empty is not allowed,
66
+ * and the content is always assumed to not be empty.
67
+ * This means the actual edits implemented for optional fields are sufficient to support required fields
68
+ * which is why this is defined and implemented in terms of optional fields.
69
+ */
70
+ export interface RequiredFieldEditor extends FieldEditor<OptionalChangeset> {
59
71
  /**
60
72
  * Creates a change which replaces the current value of the field with `newValue`.
61
73
  * @param ids - The ids for the fill and detach fields.
@@ -63,21 +75,19 @@ export interface ValueFieldEditor extends FieldEditor<OptionalChangeset> {
63
75
  set(ids: { fill: ChangeAtomId; detach: ChangeAtomId }): OptionalChangeset;
64
76
  }
65
77
 
66
- const optionalIdentifier = "Optional";
78
+ const optionalIdentifier = brandConst("Optional")<FieldKindIdentifier>();
79
+
67
80
  /**
68
81
  * 0 or 1 items.
69
82
  */
70
- export const optional = new FieldKindWithEditor(
71
- optionalIdentifier,
72
- Multiplicity.Optional,
73
- optionalChangeHandler,
74
- (types, other) =>
83
+ export const optional = new FlexFieldKind(optionalIdentifier, Multiplicity.Optional, {
84
+ changeHandler: optionalChangeHandler,
85
+ allowsTreeSupersetOf: (types, other) =>
75
86
  (other.kind === sequence.identifier || other.kind === optionalIdentifier) &&
76
87
  allowsTreeSchemaIdentifierSuperset(types, other.types),
77
- new Set([]),
78
- );
88
+ });
79
89
 
80
- export const valueFieldEditor: ValueFieldEditor = {
90
+ export const requiredFieldEditor: RequiredFieldEditor = {
81
91
  ...optionalFieldEditor,
82
92
  set: (ids: {
83
93
  fill: ChangeAtomId;
@@ -85,21 +95,22 @@ export const valueFieldEditor: ValueFieldEditor = {
85
95
  }): OptionalChangeset => optionalFieldEditor.set(false, ids),
86
96
  };
87
97
 
88
- export const valueChangeHandler: FieldChangeHandler<OptionalChangeset, ValueFieldEditor> = {
89
- ...optional.changeHandler,
90
- editor: valueFieldEditor,
98
+ export const requiredFieldChangeHandler: FieldChangeHandler<
99
+ OptionalChangeset,
100
+ RequiredFieldEditor
101
+ > = {
102
+ ...optionalChangeHandler,
103
+ editor: requiredFieldEditor,
91
104
  };
92
105
 
93
- const requiredIdentifier = "Value";
106
+ const requiredIdentifier = brandConst("Value")<FieldKindIdentifier>();
94
107
 
95
108
  /**
96
109
  * Exactly one item.
97
110
  */
98
- export const required = new FieldKindWithEditor(
99
- requiredIdentifier,
100
- Multiplicity.Single,
101
- valueChangeHandler,
102
- (types, other) =>
111
+ export const required = new FlexFieldKind(requiredIdentifier, Multiplicity.Single, {
112
+ changeHandler: requiredFieldChangeHandler,
113
+ allowsTreeSupersetOf: (types, other) =>
103
114
  // By omitting Identifier here,
104
115
  // this is making a policy choice that a schema upgrade cannot be done from required to identifier.
105
116
  // Since an identifier can be upgraded into a required field,
@@ -109,43 +120,35 @@ export const required = new FieldKindWithEditor(
109
120
  other.kind === requiredIdentifier ||
110
121
  other.kind === optional.identifier) &&
111
122
  allowsTreeSchemaIdentifierSuperset(types, other.types),
112
- new Set(),
113
- );
123
+ });
114
124
 
115
- const sequenceIdentifier = "Sequence";
125
+ const sequenceIdentifier = brandConst("Sequence")<FieldKindIdentifier>();
116
126
 
117
127
  /**
118
128
  * 0 or more items.
119
129
  */
120
- export const sequence = new FieldKindWithEditor(
121
- sequenceIdentifier,
122
- Multiplicity.Sequence,
123
- sequenceFieldChangeHandler,
124
- (types, other) =>
130
+ export const sequence = new FlexFieldKind(sequenceIdentifier, Multiplicity.Sequence, {
131
+ changeHandler: sequenceFieldChangeHandler,
132
+ allowsTreeSupersetOf: (types, other) =>
125
133
  other.kind === sequenceIdentifier &&
126
134
  allowsTreeSchemaIdentifierSuperset(types, other.types),
127
- // TODO: add normalizer/importers for handling ops from other kinds.
128
- new Set([]),
129
- );
135
+ });
130
136
 
131
- const identifierFieldIdentifier = "Identifier";
137
+ const identifierFieldIdentifier = brandConst("Identifier")<FieldKindIdentifier>();
132
138
 
133
139
  /**
134
140
  * Exactly one identifier.
135
141
  */
136
- export const identifier = new FieldKindWithEditor(
137
- identifierFieldIdentifier,
138
- Multiplicity.Single,
139
- noChangeHandler,
140
- (types, other) =>
142
+ export const identifier = new FlexFieldKind(identifierFieldIdentifier, Multiplicity.Single, {
143
+ changeHandler: noChangeHandler,
144
+ allowsTreeSupersetOf: (types, other) =>
141
145
  // Allows upgrading from identifier to required: which way this upgrade is allowed to go is a subjective policy choice.
142
146
  (other.kind === sequence.identifier ||
143
147
  other.kind === requiredIdentifier ||
144
148
  other.kind === optional.identifier ||
145
149
  other.kind === identifierFieldIdentifier) &&
146
150
  allowsTreeSchemaIdentifierSuperset(types, other.types),
147
- new Set(),
148
- );
151
+ });
149
152
 
150
153
  /**
151
154
  * Exactly 0 items.
@@ -175,39 +178,21 @@ export const identifier = new FieldKindWithEditor(
175
178
  *
176
179
  * See {@link emptyField} for a constant, reusable field using Forbidden.
177
180
  */
178
- export const forbidden = new FieldKindWithEditor(
181
+ export const forbidden = new FlexFieldKind(
179
182
  forbiddenFieldKindIdentifier,
180
183
  Multiplicity.Forbidden,
181
- noChangeHandler,
182
- // All multiplicities other than Value support empty.
183
- (types, other) => fieldKinds.get(other.kind)?.multiplicity !== Multiplicity.Single,
184
- new Set(),
184
+ {
185
+ changeHandler: noChangeHandler,
186
+ // All multiplicities other than Value support empty.
187
+ allowsTreeSupersetOf: (types, other) =>
188
+ fieldKinds.get(other.kind)?.multiplicity !== Multiplicity.Single,
189
+ },
185
190
  );
186
191
 
187
192
  export const fieldKindConfigurations: ReadonlyMap<
188
193
  ModularChangeFormatVersion,
189
194
  FieldKindConfiguration
190
195
  > = new Map([
191
- [
192
- brand(1),
193
- new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
194
- [required.identifier, { kind: required, formatVersion: 1 }],
195
- [optional.identifier, { kind: optional, formatVersion: 1 }],
196
- [sequence.identifier, { kind: sequence, formatVersion: 1 }],
197
- [forbidden.identifier, { kind: forbidden, formatVersion: 1 }],
198
- [identifier.identifier, { kind: identifier, formatVersion: 1 }],
199
- ]),
200
- ],
201
- [
202
- brand(2),
203
- new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
204
- [required.identifier, { kind: required, formatVersion: 2 }],
205
- [optional.identifier, { kind: optional, formatVersion: 2 }],
206
- [sequence.identifier, { kind: sequence, formatVersion: 1 }],
207
- [forbidden.identifier, { kind: forbidden, formatVersion: 1 }],
208
- [identifier.identifier, { kind: identifier, formatVersion: 1 }],
209
- ]),
210
- ],
211
196
  [
212
197
  brand(3),
213
198
  new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
@@ -230,7 +215,7 @@ export const fieldKindConfigurations: ReadonlyMap<
230
215
  ],
231
216
  ]);
232
217
 
233
- export type ModularChangeFormatVersion = Brand<1 | 2 | 3 | 4, "ModularChangeFormatVersion">;
218
+ export type ModularChangeFormatVersion = Brand<3 | 4, "ModularChangeFormatVersion">;
234
219
  export function getCodecTreeForModularChangeFormat(
235
220
  version: ModularChangeFormatVersion,
236
221
  ): CodecTree {
@@ -256,7 +241,7 @@ export function getCodecTreeForModularChangeFormat(
256
241
  * Before making a SharedTree format change which impacts which set of field kinds are allowed,
257
242
  * code which uses this should be audited for compatibility considerations.
258
243
  */
259
- export const fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindWithEditor> = new Map(
244
+ export const fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind> = new Map(
260
245
  [required, optional, sequence, identifier, forbidden].map((s) => [s.identifier, s]),
261
246
  );
262
247
 
@@ -265,12 +250,32 @@ export const fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindWithEditor> =
265
250
  // TODO: Find a way to make docs like {@inheritDoc required} work in vscode.
266
251
  // TODO: ensure thy work in generated docs.
267
252
  // TODO: add these comments to the rest of the cases below.
268
- export interface Required extends FlexFieldKind<"Value", Multiplicity.Single> {}
269
- export interface Optional extends FlexFieldKind<"Optional", Multiplicity.Optional> {}
270
- export interface Sequence extends FlexFieldKind<"Sequence", Multiplicity.Sequence> {}
271
- export interface Identifier extends FlexFieldKind<"Identifier", Multiplicity.Single> {}
253
+ export interface Required
254
+ extends FlexFieldKind<RequiredFieldEditor, typeof requiredIdentifier, Multiplicity.Single> {}
255
+ export interface Optional
256
+ extends FlexFieldKind<
257
+ OptionalFieldEditor,
258
+ typeof optionalIdentifier,
259
+ Multiplicity.Optional
260
+ > {}
261
+ export interface Sequence
262
+ extends FlexFieldKind<
263
+ SequenceFieldEditor,
264
+ typeof sequenceIdentifier,
265
+ Multiplicity.Sequence
266
+ > {}
267
+ export interface Identifier
268
+ extends FlexFieldKind<
269
+ FieldEditor<0>,
270
+ typeof identifierFieldIdentifier,
271
+ Multiplicity.Single
272
+ > {}
272
273
  export interface Forbidden
273
- extends FlexFieldKind<typeof forbiddenFieldKindIdentifier, Multiplicity.Forbidden> {}
274
+ extends FlexFieldKind<
275
+ FieldEditor<0>,
276
+ typeof forbiddenFieldKindIdentifier,
277
+ Multiplicity.Forbidden
278
+ > {}
274
279
 
275
280
  /**
276
281
  * Default FieldKinds with their editor types erased.
@@ -283,3 +288,10 @@ export const FieldKinds: {
283
288
  readonly identifier: Identifier;
284
289
  readonly forbidden: Forbidden;
285
290
  } = { required, optional, sequence, identifier, forbidden };
291
+
292
+ /**
293
+ * FullSchemaPolicy with the default field kinds.
294
+ */
295
+ export const defaultSchemaPolicy: FullSchemaPolicy = {
296
+ fieldKinds,
297
+ };
@@ -14,6 +14,7 @@ export {
14
14
  fieldKindConfigurations,
15
15
  getCodecTreeForModularChangeFormat,
16
16
  type ModularChangeFormatVersion,
17
+ defaultSchemaPolicy,
17
18
  } from "./defaultFieldKinds.js";
18
19
 
19
20
  export {
@@ -28,13 +29,4 @@ export {
28
29
  relevantRemovedRoots,
29
30
  } from "./defaultEditBuilder.js";
30
31
 
31
- export {
32
- SchemaValidationError,
33
- isNodeInSchema,
34
- isFieldInSchema,
35
- throwOutOfSchema,
36
- } from "./schemaChecker.js";
37
-
38
- export { defaultSchemaPolicy } from "./defaultSchema.js";
39
-
40
32
  export { MappedEditBuilder } from "./mappedEditBuilder.js";
@@ -48,7 +48,7 @@ import {
48
48
  ForestIncrementalSummaryBuilder,
49
49
  forestSummaryContentKey,
50
50
  } from "./incrementalSummaryBuilder.js";
51
- import { TreeCompressionStrategyExtended } from "../treeCompressionUtils.js";
51
+ import { TreeCompressionStrategy } from "../treeCompressionUtils.js";
52
52
  import type { IFluidHandle } from "@fluidframework/core-interfaces";
53
53
 
54
54
  /**
@@ -85,7 +85,7 @@ export class ForestSummarizer implements Summarizable {
85
85
  this.codec = makeForestSummarizerCodec(options, fieldBatchCodec);
86
86
  this.incrementalSummaryBuilder = new ForestIncrementalSummaryBuilder(
87
87
  encoderContext.encodeType ===
88
- TreeCompressionStrategyExtended.CompressedIncremental /* enableIncrementalSummary */,
88
+ TreeCompressionStrategy.CompressedIncremental /* enableIncrementalSummary */,
89
89
  (cursor: ITreeCursorSynchronous) => this.forest.chunkField(cursor),
90
90
  shouldEncodeIncrementally,
91
91
  initialSequenceNumber,
@@ -7,7 +7,7 @@ import { type Static, Type } from "@sinclair/typebox";
7
7
 
8
8
  import { Versioned } from "../../codec/index.js";
9
9
  import { schemaFormatV1 } from "../../core/index.js";
10
- import type { Brand } from "../../util/index.js";
10
+ import { brand, type Brand } from "../../util/index.js";
11
11
 
12
12
  /**
13
13
  * The format version for the forest.
@@ -20,13 +20,19 @@ export type ForestFormatVersion = Brand<
20
20
  "ForestFormatVersion"
21
21
  >;
22
22
 
23
- export const Format = Type.Object(
24
- {
25
- version: Type.Literal(ForestFormatVersion.v1),
26
- keys: Type.Array(schemaFormatV1.FieldKeySchema),
27
- fields: Versioned,
28
- },
29
- { additionalProperties: false },
30
- );
23
+ const FormatGeneric = (
24
+ version: ForestFormatVersion,
25
+ // Return type is intentionally derived.
26
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
27
+ ) =>
28
+ Type.Object(
29
+ {
30
+ version: Type.Literal(version),
31
+ keys: Type.Array(schemaFormatV1.FieldKeySchema),
32
+ fields: Versioned,
33
+ },
34
+ { additionalProperties: false },
35
+ );
31
36
 
37
+ export const Format = FormatGeneric(brand<ForestFormatVersion>(ForestFormatVersion.v1));
32
38
  export type Format = Static<typeof Format>;
@@ -81,7 +81,6 @@ export {
81
81
  genericFieldKind,
82
82
  type HasFieldChanges,
83
83
  type NodeExistsConstraint,
84
- FieldKindWithEditor,
85
84
  ModularChangeFamily,
86
85
  type RelevantRemovedRootsFromChild,
87
86
  EncodedModularChangeset,
@@ -104,7 +103,7 @@ export {
104
103
  defaultChunkPolicy,
105
104
  type FieldBatch,
106
105
  type FieldBatchCodec,
107
- type FieldBatchFormatVersion,
106
+ FieldBatchFormatVersion,
108
107
  getCodecTreeForFieldBatchFormat,
109
108
  makeTreeChunker,
110
109
  makeFieldBatchCodec,
@@ -145,13 +144,16 @@ export {
145
144
  fieldKindConfigurations,
146
145
  intoDelta,
147
146
  relevantRemovedRoots,
147
+ getCodecTreeForModularChangeFormat,
148
+ type ModularChangeFormatVersion,
149
+ } from "./default-schema/index.js";
150
+
151
+ export {
148
152
  SchemaValidationError,
149
153
  isNodeInSchema,
150
154
  isFieldInSchema,
151
155
  throwOutOfSchema,
152
- getCodecTreeForModularChangeFormat,
153
- type ModularChangeFormatVersion,
154
- } from "./default-schema/index.js";
156
+ } from "./schemaChecker.js";
155
157
 
156
158
  export {
157
159
  type FlexTreeOptionalField,
@@ -188,11 +190,7 @@ export {
188
190
  type Observer,
189
191
  } from "./flex-tree/index.js";
190
192
 
191
- export {
192
- TreeCompressionStrategy,
193
- TreeCompressionStrategyExtended,
194
- type TreeCompressionStrategyPrivate,
195
- } from "./treeCompressionUtils.js";
193
+ export { TreeCompressionStrategy } from "./treeCompressionUtils.js";
196
194
 
197
195
  export { valueSchemaAllows } from "./valueUtilities.js";
198
196
 
@@ -19,7 +19,6 @@ import {
19
19
  import { compareSets } from "../../util/index.js";
20
20
 
21
21
  import type { FullSchemaPolicy } from "./fieldKind.js";
22
- import { withEditor } from "./fieldKindWithEditor.js";
23
22
  import { isNeverTree } from "./isNeverTree.js";
24
23
 
25
24
  /**
@@ -133,8 +132,8 @@ export function allowsFieldSuperset(
133
132
  original: TreeFieldStoredSchema,
134
133
  superset: TreeFieldStoredSchema,
135
134
  ): boolean {
136
- return withEditor(
137
- policy.fieldKinds.get(original.kind) ?? fail(0xb1b /* missing kind */),
135
+ return (
136
+ policy.fieldKinds.get(original.kind) ?? fail(0xb1b /* missing kind */)
138
137
  ).allowsFieldSuperset(policy, originalData, original.types, superset);
139
138
  }
140
139
 
@@ -8,7 +8,14 @@ import type {
8
8
  FieldKindData,
9
9
  Multiplicity,
10
10
  SchemaPolicy,
11
+ TreeFieldStoredSchema,
12
+ TreeStoredSchema,
13
+ TreeTypeSet,
11
14
  } from "../../core/index.js";
15
+ import type { MakeNominal } from "../../util/index.js";
16
+
17
+ import type { FieldChangeHandler, FieldEditor } from "./fieldChangeHandler.js";
18
+ import { isNeverField } from "./isNeverTree.js";
12
19
 
13
20
  /**
14
21
  * Functionality for FieldKinds that is stable,
@@ -22,26 +29,96 @@ import type {
22
29
  *
23
30
  * These policies include the data encoding, change encoding, change rebase and change application.
24
31
  *
25
- * @sealed * @privateRemarks
26
- * This being @sealed is for users of this package.
27
- * This package itself may provide implementations.
28
- * This pattern was picked instead of an interface since we do not have a convention for how to mark interfaces as only allowed to be implemented by the package declaring them,
29
- * and using a class also gets stronger (nominal) typing for objects which will be down cast.
32
+ * @privateRemarks
33
+ * Using a class gets stronger (nominal) typing for objects which will be down cast.
30
34
  */
31
- export abstract class FlexFieldKind<
32
- TName extends string = string,
35
+ export class FlexFieldKind<
36
+ // TODO: stronger typing
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ TEditor extends FieldEditor<any> = FieldEditor<any>,
39
+ TName extends FieldKindIdentifier = FieldKindIdentifier,
33
40
  TMultiplicity extends Multiplicity = Multiplicity,
34
41
  > implements FieldKindData
35
42
  {
43
+ protected _typeCheck!: MakeNominal;
44
+
36
45
  /**
37
- * @param identifier - Globally scoped identifier.
38
- * @param multiplicity - bound on the number of children that fields of this kind may have.
39
- * TODO: consider replacing with numeric upper and lower bounds.
46
+ * Change handling policy.
40
47
  */
41
- protected constructor(
42
- public readonly identifier: TName & FieldKindIdentifier,
48
+ // TODO: stronger typing
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ public readonly changeHandler: FieldChangeHandler<any, TEditor>;
51
+
52
+ public constructor(
53
+ public readonly identifier: TName,
43
54
  public readonly multiplicity: TMultiplicity,
44
- ) {}
55
+ // TODO: stronger typing
56
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
+ private readonly options: FieldKindOptions<FieldChangeHandler<any, TEditor>>,
58
+ ) {
59
+ this.changeHandler = options.changeHandler;
60
+ }
61
+
62
+ /**
63
+ * Returns true if and only if `superset` permits a (non-strict) superset of the subtrees
64
+ * allowed by field made from `this` and `originalTypes`.
65
+ *
66
+ * TODO: clarify the relationship between this and FieldKindData, and issues with cyclic schema upgrades.
67
+ */
68
+ public allowsFieldSuperset(
69
+ policy: SchemaPolicy,
70
+ originalData: TreeStoredSchema,
71
+ originalTypes: TreeTypeSet,
72
+ superset: TreeFieldStoredSchema,
73
+ ): boolean {
74
+ if (
75
+ isNeverField(policy, originalData, {
76
+ kind: this.identifier,
77
+ types: originalTypes,
78
+ // Metadata is not used for this check.
79
+ persistedMetadata: undefined,
80
+ })
81
+ ) {
82
+ return true;
83
+ }
84
+ if (isNeverField(policy, originalData, superset)) {
85
+ return false;
86
+ }
87
+ return this.options.allowsTreeSupersetOf(originalTypes, superset);
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Additional options for {@link FlexFieldKind}.
93
+ *
94
+ * @remarks
95
+ * Puts the more confusing parameters into this object so they get explicit names to help with clarity.
96
+ */
97
+ export interface FieldKindOptions<TFieldChangeHandler> {
98
+ /**
99
+ * Change handling policy.
100
+ */
101
+ readonly changeHandler: TFieldChangeHandler;
102
+
103
+ /**
104
+ * Returns true if and only if `superset` permits a (non-strict) superset of the subtrees
105
+ * allowed by field made from `this` and `originalTypes`.
106
+ * @remarks
107
+ * Used by {@link FlexFieldKind.allowsFieldSuperset}, which handles the `never` cases before calling this.
108
+ */
109
+ readonly allowsTreeSupersetOf: (
110
+ originalTypes: TreeTypeSet,
111
+ superset: TreeFieldStoredSchema,
112
+ ) => boolean;
113
+
114
+ /**
115
+ * Kinds (in addition to this) whose edits can be processed by changeHandler.
116
+ * If the kind of a field changes, and edits are rebased across that kind change,
117
+ * listing the other old kind here can prevent those edits from being conflicted and
118
+ * provide a chance to handle them.
119
+ */
120
+ // TODO: provide this and use it for improved support for rebasing changes across schema upgrades.
121
+ // readonly handlesEditsFrom: ReadonlySet<FieldKindIdentifier>;
45
122
  }
46
123
 
47
124
  /**
@@ -4,14 +4,13 @@
4
4
  */
5
5
 
6
6
  import type { FieldKindIdentifier } from "../../core/index.js";
7
-
8
- import type { FieldKindWithEditor } from "./fieldKindWithEditor.js";
7
+ import type { FlexFieldKind } from "./fieldKind.js";
9
8
 
10
9
  /**
11
10
  * Configuration for a single field kind.
12
11
  */
13
12
  export interface FieldKindConfigurationEntry {
14
- readonly kind: FieldKindWithEditor;
13
+ readonly kind: FlexFieldKind;
15
14
  /**
16
15
  * The format to be used for encoding changesets for this field kind.
17
16
  */
@@ -9,6 +9,7 @@ import { BTree } from "@tylerbu/sorted-btree-es6";
9
9
  import {
10
10
  type DeltaDetachedNodeId,
11
11
  type DeltaMark,
12
+ type FieldKindIdentifier,
12
13
  Multiplicity,
13
14
  type RevisionTag,
14
15
  replaceAtomRevisions,
@@ -24,10 +25,11 @@ import type {
24
25
  RelevantRemovedRootsFromChild,
25
26
  ToDelta,
26
27
  } from "./fieldChangeHandler.js";
27
- import { FieldKindWithEditor } from "./fieldKindWithEditor.js";
28
28
  import { makeGenericChangeCodec } from "./genericFieldKindCodecs.js";
29
29
  import { newGenericChangeset, type GenericChangeset } from "./genericFieldKindTypes.js";
30
30
  import type { NodeId } from "./modularChangeTypes.js";
31
+ import { FlexFieldKind } from "./fieldKind.js";
32
+ import { brandConst } from "../../util/index.js";
31
33
 
32
34
  /**
33
35
  * {@link FieldChangeHandler} implementation for {@link GenericChangeset}.
@@ -164,12 +166,10 @@ function replaceRevisions(
164
166
  /**
165
167
  * {@link FieldKind} used to represent changes to elements of a field in a field-kind-agnostic format.
166
168
  */
167
- export const genericFieldKind: FieldKindWithEditor = new FieldKindWithEditor(
168
- "ModularEditBuilder.Generic",
169
+ export const genericFieldKind: FlexFieldKind = new FlexFieldKind(
170
+ brandConst("ModularEditBuilder.Generic")<FieldKindIdentifier>(),
169
171
  Multiplicity.Sequence,
170
- genericChangeHandler,
171
- (types, other) => false,
172
- new Set(),
172
+ { changeHandler: genericChangeHandler, allowsTreeSupersetOf: (types, other) => false },
173
173
  );
174
174
 
175
175
  /**
@@ -26,7 +26,6 @@ export {
26
26
  EncodedNodeChangeset,
27
27
  } from "./modularChangeFormat.js";
28
28
  export { FlexFieldKind, type FullSchemaPolicy } from "./fieldKind.js";
29
- export { FieldKindWithEditor } from "./fieldKindWithEditor.js";
30
29
  export {
31
30
  type FieldChangeHandler,
32
31
  type FieldChangeDelta,
@@ -13,12 +13,11 @@ import {
13
13
  type TreeNodeStoredSchema,
14
14
  type TreeStoredSchema,
15
15
  Multiplicity,
16
+ type SchemaPolicy,
16
17
  } from "../../core/index.js";
17
18
 
18
- import type { FullSchemaPolicy } from "./fieldKind.js";
19
-
20
19
  export function isNeverField(
21
- policy: FullSchemaPolicy,
20
+ policy: SchemaPolicy,
22
21
  originalData: TreeStoredSchema,
23
22
  field: TreeFieldStoredSchema,
24
23
  ): boolean {
@@ -26,7 +25,7 @@ export function isNeverField(
26
25
  }
27
26
 
28
27
  export function isNeverFieldRecursive(
29
- policy: FullSchemaPolicy,
28
+ policy: SchemaPolicy,
30
29
  originalData: TreeStoredSchema,
31
30
  field: TreeFieldStoredSchema,
32
31
  parentTypeStack: Set<TreeNodeStoredSchema>,
@@ -54,29 +53,29 @@ export function isNeverFieldRecursive(
54
53
  }
55
54
  return false;
56
55
  }
56
+
57
57
  /**
58
58
  * Returns true iff there are no possible trees that could meet this schema.
59
59
  * Trees which are infinite (like endless linked lists) are considered impossible.
60
60
  *
61
61
  * `undefined` means the schema is not present and thus a NeverTree.
62
62
  */
63
-
64
63
  export function isNeverTree(
65
- policy: FullSchemaPolicy,
64
+ policy: SchemaPolicy,
66
65
  originalData: TreeStoredSchema,
67
66
  treeNode: TreeNodeStoredSchema | undefined,
68
67
  ): boolean {
69
68
  return isNeverTreeRecursive(policy, originalData, treeNode, new Set());
70
69
  }
70
+
71
71
  /**
72
72
  * Returns true iff there are no possible trees that could meet this schema.
73
73
  * Trees which are infinite (like endless linked lists) are considered impossible.
74
74
  *
75
75
  * `undefined` means the schema is not present and thus a NeverTree.
76
76
  */
77
-
78
77
  export function isNeverTreeRecursive(
79
- policy: FullSchemaPolicy,
78
+ policy: SchemaPolicy,
80
79
  originalData: TreeStoredSchema,
81
80
  treeNode: TreeNodeStoredSchema | undefined,
82
81
  parentTypeStack: Set<TreeNodeStoredSchema>,