@fluidframework/tree 2.51.0 → 2.53.0-350190

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (730) hide show
  1. package/.vscode/settings.json +0 -1
  2. package/CHANGELOG.md +43 -0
  3. package/api-report/tree.alpha.api.md +40 -30
  4. package/dist/alpha.d.ts +2 -1
  5. package/dist/codec/codec.d.ts +2 -1
  6. package/dist/codec/codec.d.ts.map +1 -1
  7. package/dist/codec/codec.js +4 -3
  8. package/dist/codec/codec.js.map +1 -1
  9. package/dist/core/index.d.ts +1 -1
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +3 -2
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/rebase/index.d.ts +1 -1
  14. package/dist/core/rebase/index.d.ts.map +1 -1
  15. package/dist/core/rebase/index.js +2 -1
  16. package/dist/core/rebase/index.js.map +1 -1
  17. package/dist/core/rebase/types.d.ts +3 -1
  18. package/dist/core/rebase/types.d.ts.map +1 -1
  19. package/dist/core/rebase/types.js +2 -1
  20. package/dist/core/rebase/types.js.map +1 -1
  21. package/dist/core/schema-stored/schema.d.ts +1 -23
  22. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  23. package/dist/core/schema-stored/schema.js +2 -2
  24. package/dist/core/schema-stored/schema.js.map +1 -1
  25. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  26. package/dist/core/tree/detachedFieldIndex.js +2 -3
  27. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  28. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  29. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  30. package/dist/core/tree/detachedFieldIndexCodecCommon.js +68 -0
  31. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  32. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  33. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  34. package/dist/core/tree/detachedFieldIndexCodecV1.js +55 -0
  35. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  36. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  37. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  38. package/dist/core/tree/detachedFieldIndexCodecV2.js +49 -0
  39. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  40. package/dist/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  41. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  42. package/dist/core/tree/detachedFieldIndexCodecs.js +26 -0
  43. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  44. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  45. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  46. package/dist/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +18 -13
  47. package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  48. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  49. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  50. package/dist/core/tree/detachedFieldIndexFormatV1.js +12 -0
  51. package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  52. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  53. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  54. package/dist/core/tree/detachedFieldIndexFormatV2.js +14 -0
  55. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  56. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  57. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  58. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +21 -21
  59. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  61. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  62. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  63. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  64. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  65. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  66. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +74 -61
  67. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  68. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  69. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  70. package/dist/feature-libraries/chunked-forest/codec/format.js +18 -12
  71. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  72. package/{lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts → dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  73. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  74. package/dist/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +23 -17
  75. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  76. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  77. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  78. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -22
  79. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  80. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  81. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  82. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  83. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  84. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +15 -2
  85. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  86. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  87. package/dist/feature-libraries/default-schema/defaultSchema.js +0 -2
  88. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  89. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  90. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  91. package/dist/feature-libraries/default-schema/index.js +2 -2
  92. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  93. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  94. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  95. package/dist/feature-libraries/default-schema/schemaChecker.js +31 -26
  96. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  97. package/dist/feature-libraries/index.d.ts +1 -2
  98. package/dist/feature-libraries/index.d.ts.map +1 -1
  99. package/dist/feature-libraries/index.js +2 -4
  100. package/dist/feature-libraries/index.js.map +1 -1
  101. package/dist/feature-libraries/modular-schema/comparison.d.ts +5 -6
  102. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  103. package/dist/feature-libraries/modular-schema/comparison.js +15 -16
  104. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  105. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
  106. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  107. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
  108. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  109. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  110. package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -0
  111. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
  113. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  114. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +49 -20
  115. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  116. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  117. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  118. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  119. package/dist/feature-libraries/object-forest/objectForest.js +2 -3
  120. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  121. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  122. package/dist/feature-libraries/optional-field/optionalField.js +3 -0
  123. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  124. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
  125. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
  126. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
  127. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
  128. package/dist/index.d.ts +1 -1
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +6 -2
  131. package/dist/index.js.map +1 -1
  132. package/dist/jsonDomainSchema.d.ts +5 -3
  133. package/dist/jsonDomainSchema.d.ts.map +1 -1
  134. package/dist/jsonDomainSchema.js.map +1 -1
  135. package/dist/packageVersion.d.ts +1 -1
  136. package/dist/packageVersion.d.ts.map +1 -1
  137. package/dist/packageVersion.js +1 -1
  138. package/dist/packageVersion.js.map +1 -1
  139. package/dist/shared-tree/independentView.d.ts +8 -0
  140. package/dist/shared-tree/independentView.d.ts.map +1 -1
  141. package/dist/shared-tree/independentView.js +23 -11
  142. package/dist/shared-tree/independentView.js.map +1 -1
  143. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  144. package/dist/shared-tree/schematizeTree.js +1 -1
  145. package/dist/shared-tree/schematizeTree.js.map +1 -1
  146. package/dist/shared-tree/schematizingTreeView.d.ts +0 -1
  147. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  148. package/dist/shared-tree/schematizingTreeView.js +9 -12
  149. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  150. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  151. package/dist/shared-tree/sharedTree.js +1 -29
  152. package/dist/shared-tree/sharedTree.js.map +1 -1
  153. package/dist/shared-tree/treeAlpha.d.ts +20 -6
  154. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  155. package/dist/shared-tree/treeAlpha.js +18 -7
  156. package/dist/shared-tree/treeAlpha.js.map +1 -1
  157. package/dist/shared-tree/treeCheckout.d.ts +2 -1
  158. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  159. package/dist/shared-tree/treeCheckout.js +32 -0
  160. package/dist/shared-tree/treeCheckout.js.map +1 -1
  161. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  162. package/dist/shared-tree-core/branch.js +1 -1
  163. package/dist/shared-tree-core/branch.js.map +1 -1
  164. package/dist/simple-tree/api/conciseTree.d.ts +2 -2
  165. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  166. package/dist/simple-tree/api/conciseTree.js +6 -6
  167. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  168. package/dist/simple-tree/api/configuration.d.ts +11 -2
  169. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  170. package/dist/simple-tree/api/configuration.js +5 -1
  171. package/dist/simple-tree/api/configuration.js.map +1 -1
  172. package/dist/simple-tree/api/create.d.ts +8 -7
  173. package/dist/simple-tree/api/create.d.ts.map +1 -1
  174. package/dist/simple-tree/api/create.js +33 -23
  175. package/dist/simple-tree/api/create.js.map +1 -1
  176. package/dist/simple-tree/api/customTree.d.ts +25 -4
  177. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  178. package/dist/simple-tree/api/customTree.js +42 -16
  179. package/dist/simple-tree/api/customTree.js.map +1 -1
  180. package/dist/simple-tree/api/discrepancies.d.ts +94 -0
  181. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
  182. package/dist/simple-tree/api/discrepancies.js +256 -0
  183. package/dist/simple-tree/api/discrepancies.js.map +1 -0
  184. package/dist/simple-tree/api/index.d.ts +3 -2
  185. package/dist/simple-tree/api/index.d.ts.map +1 -1
  186. package/dist/simple-tree/api/index.js +3 -2
  187. package/dist/simple-tree/api/index.js.map +1 -1
  188. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  189. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  190. package/dist/simple-tree/api/schemaCompatibilityTester.js +17 -117
  191. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  192. package/dist/simple-tree/api/schemaFactory.d.ts +16 -159
  193. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  194. package/dist/simple-tree/api/schemaFactory.js +4 -47
  195. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  196. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
  197. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  198. package/dist/simple-tree/api/schemaFactoryAlpha.js +33 -11
  199. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  200. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
  201. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  202. package/dist/simple-tree/api/schemaFactoryRecursive.js +1 -7
  203. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  204. package/dist/simple-tree/api/schemaStatics.d.ts +158 -0
  205. package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -0
  206. package/dist/simple-tree/api/schemaStatics.js +59 -0
  207. package/dist/simple-tree/api/schemaStatics.js.map +1 -0
  208. package/dist/simple-tree/api/storedSchema.d.ts +5 -3
  209. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  210. package/dist/simple-tree/api/storedSchema.js +9 -3
  211. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  212. package/dist/simple-tree/api/treeBeta.d.ts +2 -2
  213. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  214. package/dist/simple-tree/api/treeBeta.js +16 -4
  215. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  216. package/dist/simple-tree/api/verboseTree.d.ts +2 -2
  217. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  218. package/dist/simple-tree/api/verboseTree.js +15 -15
  219. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  220. package/dist/simple-tree/core/allowedTypes.d.ts +43 -11
  221. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  222. package/dist/simple-tree/core/allowedTypes.js +51 -11
  223. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  224. package/dist/simple-tree/core/context.d.ts +13 -2
  225. package/dist/simple-tree/core/context.d.ts.map +1 -1
  226. package/dist/simple-tree/core/context.js +22 -9
  227. package/dist/simple-tree/core/context.js.map +1 -1
  228. package/dist/simple-tree/core/index.d.ts +6 -4
  229. package/dist/simple-tree/core/index.d.ts.map +1 -1
  230. package/dist/simple-tree/core/index.js +8 -1
  231. package/dist/simple-tree/core/index.js.map +1 -1
  232. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
  233. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
  234. package/dist/simple-tree/core/simpleNodeSchemaBase.js +7 -0
  235. package/dist/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
  236. package/dist/simple-tree/core/toStored.d.ts +32 -0
  237. package/dist/simple-tree/core/toStored.d.ts.map +1 -0
  238. package/dist/simple-tree/core/toStored.js +37 -0
  239. package/dist/simple-tree/core/toStored.js.map +1 -0
  240. package/dist/simple-tree/core/treeNodeKernel.d.ts +1 -1
  241. package/dist/simple-tree/core/treeNodeKernel.js +1 -1
  242. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  243. package/dist/simple-tree/core/treeNodeSchema.d.ts +7 -2
  244. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  245. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  246. package/dist/simple-tree/core/treeNodeValid.d.ts +7 -2
  247. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  248. package/dist/simple-tree/core/treeNodeValid.js +19 -4
  249. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  250. package/dist/simple-tree/core/walkSchema.d.ts +22 -5
  251. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  252. package/dist/simple-tree/core/walkSchema.js +6 -2
  253. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  254. package/dist/simple-tree/createContext.d.ts +2 -0
  255. package/dist/simple-tree/createContext.d.ts.map +1 -1
  256. package/dist/simple-tree/createContext.js +4 -2
  257. package/dist/simple-tree/createContext.js.map +1 -1
  258. package/dist/simple-tree/fieldSchema.d.ts +1 -0
  259. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  260. package/dist/simple-tree/fieldSchema.js +2 -1
  261. package/dist/simple-tree/fieldSchema.js.map +1 -1
  262. package/dist/simple-tree/index.d.ts +7 -7
  263. package/dist/simple-tree/index.d.ts.map +1 -1
  264. package/dist/simple-tree/index.js +13 -8
  265. package/dist/simple-tree/index.js.map +1 -1
  266. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  267. package/dist/simple-tree/leafNodeSchema.js +1 -0
  268. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  269. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  270. package/dist/simple-tree/node-kinds/array/arrayNode.js +18 -4
  271. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  272. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  273. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  274. package/dist/simple-tree/node-kinds/index.js +1 -2
  275. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  276. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  277. package/dist/simple-tree/node-kinds/map/mapNode.js +9 -2
  278. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  279. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  280. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  281. package/dist/simple-tree/node-kinds/object/index.js +1 -2
  282. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  283. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +3 -8
  284. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  285. package/dist/simple-tree/node-kinds/object/objectNode.js +41 -44
  286. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  287. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  288. package/dist/simple-tree/node-kinds/record/recordNode.js +9 -2
  289. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  290. package/dist/simple-tree/prepareForInsertion.d.ts +6 -6
  291. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  292. package/dist/simple-tree/prepareForInsertion.js +19 -13
  293. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  294. package/dist/simple-tree/simpleSchema.d.ts +6 -21
  295. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  296. package/dist/simple-tree/simpleSchema.js.map +1 -1
  297. package/dist/simple-tree/toStoredSchema.d.ts +38 -11
  298. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  299. package/dist/simple-tree/toStoredSchema.js +71 -33
  300. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  301. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  302. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  303. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  304. package/dist/simple-tree/walkFieldSchema.d.ts +1 -0
  305. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
  306. package/dist/simple-tree/walkFieldSchema.js +1 -0
  307. package/dist/simple-tree/walkFieldSchema.js.map +1 -1
  308. package/lib/alpha.d.ts +2 -1
  309. package/lib/codec/codec.d.ts +2 -1
  310. package/lib/codec/codec.d.ts.map +1 -1
  311. package/lib/codec/codec.js +4 -3
  312. package/lib/codec/codec.js.map +1 -1
  313. package/lib/core/index.d.ts +1 -1
  314. package/lib/core/index.d.ts.map +1 -1
  315. package/lib/core/index.js +1 -1
  316. package/lib/core/index.js.map +1 -1
  317. package/lib/core/rebase/index.d.ts +1 -1
  318. package/lib/core/rebase/index.d.ts.map +1 -1
  319. package/lib/core/rebase/index.js +1 -1
  320. package/lib/core/rebase/index.js.map +1 -1
  321. package/lib/core/rebase/types.d.ts +3 -1
  322. package/lib/core/rebase/types.d.ts.map +1 -1
  323. package/lib/core/rebase/types.js +1 -0
  324. package/lib/core/rebase/types.js.map +1 -1
  325. package/lib/core/schema-stored/schema.d.ts +1 -23
  326. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  327. package/lib/core/schema-stored/schema.js +2 -2
  328. package/lib/core/schema-stored/schema.js.map +1 -1
  329. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  330. package/lib/core/tree/detachedFieldIndex.js +2 -3
  331. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  332. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  333. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  334. package/lib/core/tree/detachedFieldIndexCodecCommon.js +64 -0
  335. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  336. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  337. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  338. package/lib/core/tree/detachedFieldIndexCodecV1.js +51 -0
  339. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  340. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  341. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  342. package/lib/core/tree/detachedFieldIndexCodecV2.js +45 -0
  343. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  344. package/lib/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  345. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  346. package/lib/core/tree/detachedFieldIndexCodecs.js +21 -0
  347. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  348. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  349. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  350. package/lib/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +13 -10
  351. package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  352. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  353. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  354. package/lib/core/tree/detachedFieldIndexFormatV1.js +9 -0
  355. package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  356. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  357. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  358. package/lib/core/tree/detachedFieldIndexFormatV2.js +11 -0
  359. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  360. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  361. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  362. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +19 -19
  363. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  364. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  365. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  366. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  367. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  368. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  369. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  370. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +70 -57
  371. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  372. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  373. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  374. package/lib/feature-libraries/chunked-forest/codec/format.js +17 -11
  375. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  376. package/{dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts → lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  377. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  378. package/lib/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +21 -15
  379. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  380. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  381. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  382. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +19 -19
  383. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  384. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  385. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  386. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  387. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  388. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +15 -2
  389. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  390. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  391. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -2
  392. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  393. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  394. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  395. package/lib/feature-libraries/default-schema/index.js +1 -1
  396. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  397. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  398. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  399. package/lib/feature-libraries/default-schema/schemaChecker.js +29 -24
  400. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  401. package/lib/feature-libraries/index.d.ts +1 -2
  402. package/lib/feature-libraries/index.d.ts.map +1 -1
  403. package/lib/feature-libraries/index.js +1 -2
  404. package/lib/feature-libraries/index.js.map +1 -1
  405. package/lib/feature-libraries/modular-schema/comparison.d.ts +5 -6
  406. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  407. package/lib/feature-libraries/modular-schema/comparison.js +14 -14
  408. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  409. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
  410. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  411. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
  412. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  413. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  414. package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -0
  415. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  416. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
  417. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  418. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +50 -21
  419. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  420. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  421. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  422. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  423. package/lib/feature-libraries/object-forest/objectForest.js +3 -4
  424. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  425. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  426. package/lib/feature-libraries/optional-field/optionalField.js +3 -0
  427. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  428. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
  429. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
  430. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
  431. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
  432. package/lib/index.d.ts +1 -1
  433. package/lib/index.d.ts.map +1 -1
  434. package/lib/index.js +2 -2
  435. package/lib/index.js.map +1 -1
  436. package/lib/jsonDomainSchema.d.ts +5 -3
  437. package/lib/jsonDomainSchema.d.ts.map +1 -1
  438. package/lib/jsonDomainSchema.js.map +1 -1
  439. package/lib/packageVersion.d.ts +1 -1
  440. package/lib/packageVersion.d.ts.map +1 -1
  441. package/lib/packageVersion.js +1 -1
  442. package/lib/packageVersion.js.map +1 -1
  443. package/lib/shared-tree/independentView.d.ts +8 -0
  444. package/lib/shared-tree/independentView.d.ts.map +1 -1
  445. package/lib/shared-tree/independentView.js +21 -10
  446. package/lib/shared-tree/independentView.js.map +1 -1
  447. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  448. package/lib/shared-tree/schematizeTree.js +2 -2
  449. package/lib/shared-tree/schematizeTree.js.map +1 -1
  450. package/lib/shared-tree/schematizingTreeView.d.ts +0 -1
  451. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  452. package/lib/shared-tree/schematizingTreeView.js +10 -13
  453. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  454. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  455. package/lib/shared-tree/sharedTree.js +2 -30
  456. package/lib/shared-tree/sharedTree.js.map +1 -1
  457. package/lib/shared-tree/treeAlpha.d.ts +20 -6
  458. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  459. package/lib/shared-tree/treeAlpha.js +19 -8
  460. package/lib/shared-tree/treeAlpha.js.map +1 -1
  461. package/lib/shared-tree/treeCheckout.d.ts +2 -1
  462. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  463. package/lib/shared-tree/treeCheckout.js +33 -1
  464. package/lib/shared-tree/treeCheckout.js.map +1 -1
  465. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  466. package/lib/shared-tree-core/branch.js +1 -1
  467. package/lib/shared-tree-core/branch.js.map +1 -1
  468. package/lib/simple-tree/api/conciseTree.d.ts +2 -2
  469. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  470. package/lib/simple-tree/api/conciseTree.js +6 -6
  471. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  472. package/lib/simple-tree/api/configuration.d.ts +11 -2
  473. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  474. package/lib/simple-tree/api/configuration.js +6 -2
  475. package/lib/simple-tree/api/configuration.js.map +1 -1
  476. package/lib/simple-tree/api/create.d.ts +8 -7
  477. package/lib/simple-tree/api/create.d.ts.map +1 -1
  478. package/lib/simple-tree/api/create.js +35 -25
  479. package/lib/simple-tree/api/create.js.map +1 -1
  480. package/lib/simple-tree/api/customTree.d.ts +25 -4
  481. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  482. package/lib/simple-tree/api/customTree.js +43 -17
  483. package/lib/simple-tree/api/customTree.js.map +1 -1
  484. package/lib/simple-tree/api/discrepancies.d.ts +94 -0
  485. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
  486. package/lib/simple-tree/api/discrepancies.js +251 -0
  487. package/lib/simple-tree/api/discrepancies.js.map +1 -0
  488. package/lib/simple-tree/api/index.d.ts +3 -2
  489. package/lib/simple-tree/api/index.d.ts.map +1 -1
  490. package/lib/simple-tree/api/index.js +2 -1
  491. package/lib/simple-tree/api/index.js.map +1 -1
  492. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  493. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  494. package/lib/simple-tree/api/schemaCompatibilityTester.js +19 -119
  495. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  496. package/lib/simple-tree/api/schemaFactory.d.ts +16 -159
  497. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  498. package/lib/simple-tree/api/schemaFactory.js +2 -45
  499. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  500. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
  501. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  502. package/lib/simple-tree/api/schemaFactoryAlpha.js +23 -1
  503. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  504. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
  505. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  506. package/lib/simple-tree/api/schemaFactoryRecursive.js +0 -5
  507. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  508. package/lib/simple-tree/api/schemaStatics.d.ts +158 -0
  509. package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -0
  510. package/lib/simple-tree/api/schemaStatics.js +56 -0
  511. package/lib/simple-tree/api/schemaStatics.js.map +1 -0
  512. package/lib/simple-tree/api/storedSchema.d.ts +5 -3
  513. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  514. package/lib/simple-tree/api/storedSchema.js +12 -6
  515. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  516. package/lib/simple-tree/api/treeBeta.d.ts +2 -2
  517. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  518. package/lib/simple-tree/api/treeBeta.js +14 -2
  519. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  520. package/lib/simple-tree/api/verboseTree.d.ts +2 -2
  521. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  522. package/lib/simple-tree/api/verboseTree.js +9 -9
  523. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  524. package/lib/simple-tree/core/allowedTypes.d.ts +43 -11
  525. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  526. package/lib/simple-tree/core/allowedTypes.js +52 -11
  527. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  528. package/lib/simple-tree/core/context.d.ts +13 -2
  529. package/lib/simple-tree/core/context.d.ts.map +1 -1
  530. package/lib/simple-tree/core/context.js +22 -9
  531. package/lib/simple-tree/core/context.js.map +1 -1
  532. package/lib/simple-tree/core/index.d.ts +6 -4
  533. package/lib/simple-tree/core/index.d.ts.map +1 -1
  534. package/lib/simple-tree/core/index.js +4 -3
  535. package/lib/simple-tree/core/index.js.map +1 -1
  536. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
  537. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
  538. package/lib/simple-tree/core/simpleNodeSchemaBase.js +6 -0
  539. package/lib/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
  540. package/lib/simple-tree/core/toStored.d.ts +32 -0
  541. package/lib/simple-tree/core/toStored.d.ts.map +1 -0
  542. package/lib/simple-tree/core/toStored.js +32 -0
  543. package/lib/simple-tree/core/toStored.js.map +1 -0
  544. package/lib/simple-tree/core/treeNodeKernel.d.ts +1 -1
  545. package/lib/simple-tree/core/treeNodeKernel.js +1 -1
  546. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  547. package/lib/simple-tree/core/treeNodeSchema.d.ts +7 -2
  548. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  549. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  550. package/lib/simple-tree/core/treeNodeValid.d.ts +7 -2
  551. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  552. package/lib/simple-tree/core/treeNodeValid.js +17 -3
  553. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  554. package/lib/simple-tree/core/walkSchema.d.ts +22 -5
  555. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  556. package/lib/simple-tree/core/walkSchema.js +6 -2
  557. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  558. package/lib/simple-tree/createContext.d.ts +2 -0
  559. package/lib/simple-tree/createContext.d.ts.map +1 -1
  560. package/lib/simple-tree/createContext.js +5 -3
  561. package/lib/simple-tree/createContext.js.map +1 -1
  562. package/lib/simple-tree/fieldSchema.d.ts +1 -0
  563. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  564. package/lib/simple-tree/fieldSchema.js +2 -1
  565. package/lib/simple-tree/fieldSchema.js.map +1 -1
  566. package/lib/simple-tree/index.d.ts +7 -7
  567. package/lib/simple-tree/index.d.ts.map +1 -1
  568. package/lib/simple-tree/index.js +5 -5
  569. package/lib/simple-tree/index.js.map +1 -1
  570. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  571. package/lib/simple-tree/leafNodeSchema.js +2 -1
  572. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  573. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  574. package/lib/simple-tree/node-kinds/array/arrayNode.js +21 -7
  575. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  576. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  577. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  578. package/lib/simple-tree/node-kinds/index.js +1 -1
  579. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  580. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  581. package/lib/simple-tree/node-kinds/map/mapNode.js +12 -5
  582. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  583. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  584. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  585. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  586. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  587. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +3 -8
  588. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  589. package/lib/simple-tree/node-kinds/object/objectNode.js +19 -21
  590. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  591. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  592. package/lib/simple-tree/node-kinds/record/recordNode.js +12 -5
  593. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  594. package/lib/simple-tree/prepareForInsertion.d.ts +6 -6
  595. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  596. package/lib/simple-tree/prepareForInsertion.js +21 -15
  597. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  598. package/lib/simple-tree/simpleSchema.d.ts +6 -21
  599. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  600. package/lib/simple-tree/simpleSchema.js.map +1 -1
  601. package/lib/simple-tree/toStoredSchema.d.ts +38 -11
  602. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  603. package/lib/simple-tree/toStoredSchema.js +70 -34
  604. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  605. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  606. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  607. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
  608. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  609. package/lib/simple-tree/walkFieldSchema.d.ts +1 -0
  610. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
  611. package/lib/simple-tree/walkFieldSchema.js +1 -0
  612. package/lib/simple-tree/walkFieldSchema.js.map +1 -1
  613. package/package.json +23 -23
  614. package/src/codec/codec.ts +4 -3
  615. package/src/core/index.ts +2 -0
  616. package/src/core/rebase/index.ts +2 -0
  617. package/src/core/rebase/types.ts +4 -0
  618. package/src/core/schema-stored/schema.ts +2 -26
  619. package/src/core/tree/detachedFieldIndex.ts +4 -6
  620. package/src/core/tree/detachedFieldIndexCodecCommon.ts +87 -0
  621. package/src/core/tree/{detachedFieldIndexCodec.ts → detachedFieldIndexCodecV1.ts} +22 -68
  622. package/src/core/tree/detachedFieldIndexCodecV2.ts +72 -0
  623. package/src/core/tree/detachedFieldIndexCodecs.ts +44 -0
  624. package/src/core/tree/{detachedFieldIndexFormat.ts → detachedFieldIndexFormatCommon.ts} +32 -23
  625. package/src/core/tree/detachedFieldIndexFormatV1.ts +15 -0
  626. package/src/core/tree/detachedFieldIndexFormatV2.ts +17 -0
  627. package/src/feature-libraries/chunked-forest/codec/README.md +1 -1
  628. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +25 -25
  629. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -6
  630. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +96 -73
  631. package/src/feature-libraries/chunked-forest/codec/format.ts +20 -14
  632. package/src/feature-libraries/chunked-forest/codec/{nodeShape.ts → nodeEncoder.ts} +23 -17
  633. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +34 -34
  634. package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +5 -5
  635. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +11 -0
  636. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -2
  637. package/src/feature-libraries/default-schema/index.ts +1 -1
  638. package/src/feature-libraries/default-schema/schemaChecker.ts +47 -30
  639. package/src/feature-libraries/index.ts +1 -3
  640. package/src/feature-libraries/modular-schema/comparison.ts +14 -29
  641. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +9 -0
  642. package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -0
  643. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +61 -19
  644. package/src/feature-libraries/object-forest/objectForest.ts +10 -6
  645. package/src/feature-libraries/optional-field/optionalField.ts +4 -0
  646. package/src/feature-libraries/sequence-field/sequenceFieldChangeRebaser.ts +4 -0
  647. package/src/index.ts +7 -1
  648. package/src/jsonDomainSchema.ts +4 -0
  649. package/src/packageVersion.ts +1 -1
  650. package/src/shared-tree/independentView.ts +45 -19
  651. package/src/shared-tree/schematizeTree.ts +2 -2
  652. package/src/shared-tree/schematizingTreeView.ts +24 -15
  653. package/src/shared-tree/sharedTree.ts +2 -42
  654. package/src/shared-tree/treeAlpha.ts +48 -22
  655. package/src/shared-tree/treeCheckout.ts +54 -10
  656. package/src/shared-tree-core/branch.ts +1 -6
  657. package/src/simple-tree/api/conciseTree.ts +9 -7
  658. package/src/simple-tree/api/configuration.ts +18 -4
  659. package/src/simple-tree/api/create.ts +44 -36
  660. package/src/simple-tree/api/customTree.ts +59 -20
  661. package/src/simple-tree/api/discrepancies.ts +474 -0
  662. package/src/simple-tree/api/index.ts +2 -3
  663. package/src/simple-tree/api/schemaCompatibilityTester.ts +23 -151
  664. package/src/simple-tree/api/schemaFactory.ts +13 -254
  665. package/src/simple-tree/api/schemaFactoryAlpha.ts +174 -1
  666. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -25
  667. package/src/simple-tree/api/schemaStatics.ts +291 -0
  668. package/src/simple-tree/api/storedSchema.ts +18 -14
  669. package/src/simple-tree/api/treeBeta.ts +24 -4
  670. package/src/simple-tree/api/verboseTree.ts +17 -8
  671. package/src/simple-tree/core/allowedTypes.ts +87 -34
  672. package/src/simple-tree/core/context.ts +24 -22
  673. package/src/simple-tree/core/index.ts +11 -2
  674. package/src/simple-tree/core/simpleNodeSchemaBase.ts +30 -0
  675. package/src/simple-tree/core/toStored.ts +58 -0
  676. package/src/simple-tree/core/treeNodeKernel.ts +1 -1
  677. package/src/simple-tree/core/treeNodeSchema.ts +8 -2
  678. package/src/simple-tree/core/treeNodeValid.ts +23 -4
  679. package/src/simple-tree/core/walkSchema.ts +26 -6
  680. package/src/simple-tree/createContext.ts +11 -3
  681. package/src/simple-tree/fieldSchema.ts +3 -1
  682. package/src/simple-tree/index.ts +19 -13
  683. package/src/simple-tree/leafNodeSchema.ts +2 -1
  684. package/src/simple-tree/node-kinds/array/arrayNode.ts +64 -23
  685. package/src/simple-tree/node-kinds/index.ts +0 -1
  686. package/src/simple-tree/node-kinds/map/mapNode.ts +23 -2
  687. package/src/simple-tree/node-kinds/object/index.ts +0 -1
  688. package/src/simple-tree/node-kinds/object/objectNode.ts +42 -30
  689. package/src/simple-tree/node-kinds/record/recordNode.ts +20 -2
  690. package/src/simple-tree/prepareForInsertion.ts +28 -15
  691. package/src/simple-tree/simpleSchema.ts +6 -26
  692. package/src/simple-tree/toStoredSchema.ts +110 -44
  693. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +6 -2
  694. package/src/simple-tree/walkFieldSchema.ts +1 -0
  695. package/dist/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  696. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  697. package/dist/core/tree/detachedFieldIndexCodec.js +0 -100
  698. package/dist/core/tree/detachedFieldIndexCodec.js.map +0 -1
  699. package/dist/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  700. package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  701. package/dist/core/tree/detachedFieldIndexFormat.js.map +0 -1
  702. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  703. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  704. package/dist/feature-libraries/initializeForest.d.ts +0 -18
  705. package/dist/feature-libraries/initializeForest.d.ts.map +0 -1
  706. package/dist/feature-libraries/initializeForest.js +0 -35
  707. package/dist/feature-libraries/initializeForest.js.map +0 -1
  708. package/dist/simple-tree/discrepancies.d.ts +0 -167
  709. package/dist/simple-tree/discrepancies.d.ts.map +0 -1
  710. package/dist/simple-tree/discrepancies.js +0 -382
  711. package/dist/simple-tree/discrepancies.js.map +0 -1
  712. package/lib/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  713. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  714. package/lib/core/tree/detachedFieldIndexCodec.js +0 -96
  715. package/lib/core/tree/detachedFieldIndexCodec.js.map +0 -1
  716. package/lib/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  717. package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  718. package/lib/core/tree/detachedFieldIndexFormat.js.map +0 -1
  719. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  720. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  721. package/lib/feature-libraries/initializeForest.d.ts +0 -18
  722. package/lib/feature-libraries/initializeForest.d.ts.map +0 -1
  723. package/lib/feature-libraries/initializeForest.js +0 -31
  724. package/lib/feature-libraries/initializeForest.js.map +0 -1
  725. package/lib/simple-tree/discrepancies.d.ts +0 -167
  726. package/lib/simple-tree/discrepancies.d.ts.map +0 -1
  727. package/lib/simple-tree/discrepancies.js +0 -376
  728. package/lib/simple-tree/discrepancies.js.map +0 -1
  729. package/src/feature-libraries/initializeForest.ts +0 -55
  730. package/src/simple-tree/discrepancies.ts +0 -648
@@ -20,18 +20,18 @@ import {
20
20
  import type { FullSchemaPolicy } from "../../modular-schema/index.js";
21
21
 
22
22
  import {
23
- EncoderCache,
23
+ EncoderContext,
24
24
  type FieldEncoder,
25
- type FieldShaper,
25
+ type FieldEncodeBuilder,
26
26
  type KeyedFieldEncoder,
27
- type TreeShaper,
27
+ type NodeEncodeBuilder,
28
28
  anyNodeEncoder,
29
29
  asFieldEncoder,
30
30
  compressedEncode,
31
31
  } from "./compressedEncode.js";
32
32
  import type { FieldBatch } from "./fieldBatch.js";
33
33
  import { type EncodedFieldBatch, type EncodedValueShape, SpecialField } from "./format.js";
34
- import { NodeShape } from "./nodeShape.js";
34
+ import { NodeShapeBasedEncoder } from "./nodeEncoder.js";
35
35
 
36
36
  /**
37
37
  * Encode data from `fieldBatch` in into an `EncodedChunk`.
@@ -45,37 +45,38 @@ export function schemaCompressedEncode(
45
45
  fieldBatch: FieldBatch,
46
46
  idCompressor: IIdCompressor,
47
47
  ): EncodedFieldBatch {
48
- return compressedEncode(fieldBatch, buildCache(schema, policy, idCompressor));
48
+ return compressedEncode(fieldBatch, buildContext(schema, policy, idCompressor));
49
49
  }
50
50
 
51
- export function buildCache(
52
- schema: StoredSchemaCollection,
51
+ export function buildContext(
52
+ storedSchema: StoredSchemaCollection,
53
53
  policy: FullSchemaPolicy,
54
54
  idCompressor: IIdCompressor,
55
- ): EncoderCache {
56
- const cache: EncoderCache = new EncoderCache(
57
- (fieldHandler: FieldShaper, schemaName: TreeNodeSchemaIdentifier) =>
58
- treeShaper(schema, policy, fieldHandler, schemaName),
59
- (treeHandler: TreeShaper, field: TreeFieldStoredSchema) =>
60
- fieldShaper(treeHandler, field, cache, schema),
55
+ ): EncoderContext {
56
+ const context: EncoderContext = new EncoderContext(
57
+ (fieldBuilder: FieldEncodeBuilder, schemaName: TreeNodeSchemaIdentifier) =>
58
+ getNodeEncoder(fieldBuilder, storedSchema, schemaName),
59
+ (nodeBuilder: NodeEncodeBuilder, fieldSchema: TreeFieldStoredSchema) =>
60
+ getFieldEncoder(nodeBuilder, fieldSchema, context, storedSchema),
61
61
  policy.fieldKinds,
62
62
  idCompressor,
63
63
  );
64
- return cache;
64
+ return context;
65
65
  }
66
66
 
67
67
  /**
68
- * Selects shapes to use to encode fields.
68
+ * Selects an encoder to use to encode fields.
69
69
  */
70
- export function fieldShaper(
71
- treeHandler: TreeShaper,
70
+ export function getFieldEncoder(
71
+ nodeBuilder: NodeEncodeBuilder,
72
72
  field: TreeFieldStoredSchema,
73
- cache: EncoderCache,
73
+ context: EncoderContext,
74
74
  storedSchema: StoredSchemaCollection,
75
75
  ): FieldEncoder {
76
- const kind = cache.fieldShapes.get(field.kind) ?? fail(0xb52 /* missing FieldKind */);
76
+ const kind = context.fieldShapes.get(field.kind) ?? fail(0xb52 /* missing FieldKind */);
77
77
  const type = oneFromSet(field.types);
78
- const nodeEncoder = type !== undefined ? treeHandler.shapeFromTree(type) : anyNodeEncoder;
78
+ const nodeEncoder =
79
+ type !== undefined ? nodeBuilder.nodeEncoderFromSchema(type) : anyNodeEncoder;
79
80
  if (kind.multiplicity === Multiplicity.Single) {
80
81
  if (field.kind === identifierFieldKindIdentifier) {
81
82
  assert(type !== undefined, 0x999 /* field type must be defined in identifier field */);
@@ -89,7 +90,7 @@ export function fieldShaper(
89
90
  nodeSchema.leafValue === ValueSchema.String,
90
91
  0x99c /* identifier field can only be type string */,
91
92
  );
92
- const identifierNodeEncoder = new NodeShape(
93
+ const identifierNodeEncoder = new NodeShapeBasedEncoder(
93
94
  type,
94
95
  SpecialField.Identifier,
95
96
  [],
@@ -99,21 +100,20 @@ export function fieldShaper(
99
100
  }
100
101
  return asFieldEncoder(nodeEncoder);
101
102
  } else {
102
- return cache.nestedArray(nodeEncoder);
103
+ return context.nestedArrayEncoder(nodeEncoder);
103
104
  }
104
105
  }
105
106
 
106
107
  /**
107
- * Selects shapes to use to encode trees.
108
+ * Selects an encoder to use to encode nodes.
108
109
  */
109
- export function treeShaper(
110
- fullSchema: StoredSchemaCollection,
111
- policy: FullSchemaPolicy,
112
- fieldHandler: FieldShaper,
110
+ export function getNodeEncoder(
111
+ fieldBuilder: FieldEncodeBuilder,
112
+ storedSchema: StoredSchemaCollection,
113
113
  schemaName: TreeNodeSchemaIdentifier,
114
- ): NodeShape {
114
+ ): NodeShapeBasedEncoder {
115
115
  const schema =
116
- fullSchema.nodeSchema.get(schemaName) ?? fail(0xb53 /* missing node schema */);
116
+ storedSchema.nodeSchema.get(schemaName) ?? fail(0xb53 /* missing node schema */);
117
117
 
118
118
  if (schema instanceof ObjectNodeStoredSchema) {
119
119
  // TODO:Performance:
@@ -122,14 +122,14 @@ export function treeShaper(
122
122
 
123
123
  const objectNodeFields: KeyedFieldEncoder[] = [];
124
124
  for (const [key, field] of schema.objectNodeFields ?? []) {
125
- objectNodeFields.push({ key, encoder: fieldHandler.shapeFromField(field) });
125
+ objectNodeFields.push({ key, encoder: fieldBuilder.fieldEncoderFromSchema(field) });
126
126
  }
127
127
 
128
- const shape = new NodeShape(schemaName, false, objectNodeFields, undefined);
128
+ const shape = new NodeShapeBasedEncoder(schemaName, false, objectNodeFields, undefined);
129
129
  return shape;
130
130
  }
131
131
  if (schema instanceof LeafNodeStoredSchema) {
132
- const shape = new NodeShape(
132
+ const shape = new NodeShapeBasedEncoder(
133
133
  schemaName,
134
134
  valueShapeFromSchema(schema.leafValue),
135
135
  [],
@@ -138,11 +138,11 @@ export function treeShaper(
138
138
  return shape;
139
139
  }
140
140
  if (schema instanceof MapNodeStoredSchema) {
141
- const shape = new NodeShape(
141
+ const shape = new NodeShapeBasedEncoder(
142
142
  schemaName,
143
143
  false,
144
144
  [],
145
- fieldHandler.shapeFromField(schema.mapFields),
145
+ fieldBuilder.fieldEncoderFromSchema(schema.mapFields),
146
146
  );
147
147
  return shape;
148
148
  }
@@ -13,8 +13,8 @@ import type { FluidSerializableReadOnly } from "../../valueUtilities.js";
13
13
  import type { FieldBatch } from "./fieldBatch.js";
14
14
  import {
15
15
  type EncodedFieldBatch,
16
- type EncodedNestedArray,
17
- type EncodedTreeShape,
16
+ type EncodedNestedArrayShape,
17
+ type EncodedNodeShape,
18
18
  version,
19
19
  } from "./format.js";
20
20
  import type { ShapeIndex } from "./formatGeneric.js";
@@ -33,7 +33,7 @@ export function uncompressedEncode(batch: FieldBatch): EncodedFieldBatch {
33
33
  version,
34
34
  identifiers: [],
35
35
  // A single shape used to encode all fields.
36
- shapes: [{ c: anyTreeShape }, { a: anyArray }],
36
+ shapes: [{ c: anyNodeShape }, { a: anyArray }],
37
37
  // Wrap up each field as an indicator to use the above shape, and its encoded data.
38
38
  data: rootFields.map((data) => [arrayIndex, data]),
39
39
  };
@@ -42,11 +42,11 @@ export function uncompressedEncode(batch: FieldBatch): EncodedFieldBatch {
42
42
  const treeIndex: ShapeIndex = 0;
43
43
  const arrayIndex: ShapeIndex = 1;
44
44
 
45
- const anyTreeShape: EncodedTreeShape = {
45
+ const anyNodeShape: EncodedNodeShape = {
46
46
  extraFields: arrayIndex,
47
47
  };
48
48
 
49
- const anyArray: EncodedNestedArray = treeIndex;
49
+ const anyArray: EncodedNestedArrayShape = treeIndex;
50
50
 
51
51
  /**
52
52
  * Encode a field using the hard coded shape above.
@@ -41,6 +41,7 @@ export const noChangeHandler: FieldChangeHandler<0> = {
41
41
  compose: (change1: 0, change2: 0) => 0,
42
42
  invert: (changes: 0) => 0,
43
43
  rebase: (change: 0, over: 0) => 0,
44
+ mute: (changes: 0) => 0,
44
45
  }),
45
46
  codecsFactory: () => noChangeCodecFamily,
46
47
  editor: { buildChildChanges: () => fail(0xb0d /* Child changes not supported */) },
@@ -97,6 +98,11 @@ export const required = new FieldKindWithEditor(
97
98
  Multiplicity.Single,
98
99
  valueChangeHandler,
99
100
  (types, other) =>
101
+ // By omitting Identifier here,
102
+ // this is making a policy choice that a schema upgrade cannot be done from required to identifier.
103
+ // Since an identifier can be upgraded into a required field,
104
+ // preventing the inverse helps ensure that schema upgrades are monotonic.
105
+ // Which direction is allowed is a subjective policy choice.
100
106
  (other.kind === sequence.identifier ||
101
107
  other.kind === requiredIdentifier ||
102
108
  other.kind === optional.identifier ||
@@ -125,6 +131,10 @@ const nodeKeyIdentifier = "NodeKey";
125
131
 
126
132
  /**
127
133
  * Exactly one identifier.
134
+ *
135
+ * TODO: this is almost the same as identifier, but apparently unused.
136
+ * Confirm if this is truly unused since before the document format was stabilized, and remove if possible.
137
+ * @deprecated Superseded by {@link identifier}.
128
138
  */
129
139
  export const nodeKey = new FieldKindWithEditor(
130
140
  nodeKeyIdentifier,
@@ -149,6 +159,7 @@ export const identifier = new FieldKindWithEditor(
149
159
  Multiplicity.Single,
150
160
  noChangeHandler,
151
161
  (types, other) =>
162
+ // Allows upgrading from identifier to required: which way this upgrade is allowed to go is a subjective policy choice.
152
163
  (other.kind === sequence.identifier ||
153
164
  other.kind === requiredIdentifier ||
154
165
  other.kind === optional.identifier ||
@@ -12,6 +12,4 @@ import { fieldKinds } from "./defaultFieldKinds.js";
12
12
  */
13
13
  export const defaultSchemaPolicy: FullSchemaPolicy = {
14
14
  fieldKinds,
15
- validateSchema: false,
16
- allowUnknownOptionalFields: () => false,
17
15
  };
@@ -30,7 +30,7 @@ export {
30
30
  SchemaValidationError,
31
31
  isNodeInSchema,
32
32
  isFieldInSchema,
33
- inSchemaOrThrow,
33
+ throwOutOfSchema,
34
34
  } from "./schemaChecker.js";
35
35
 
36
36
  export { defaultSchemaPolicy } from "./defaultSchema.js";
@@ -32,66 +32,78 @@ export enum SchemaValidationError {
32
32
  }
33
33
 
34
34
  /**
35
- * Throws a UsageError if maybeError indicates a tree is out of schema.
35
+ * Throws a UsageError indicating a tree is out of schema.
36
36
  */
37
- export function inSchemaOrThrow(maybeError: SchemaValidationError | undefined): void {
38
- if (maybeError !== undefined) {
39
- throw new UsageError(
40
- `Tree does not conform to schema: ${SchemaValidationError[maybeError]}`,
41
- );
42
- }
37
+ export function throwOutOfSchema(maybeError: SchemaValidationError): never {
38
+ throw new UsageError(
39
+ `Tree does not conform to schema: ${SchemaValidationError[maybeError]}`,
40
+ );
43
41
  }
44
42
 
43
+ type NotUndefined = number | string | boolean | bigint | symbol | object;
44
+
45
45
  /**
46
46
  * Deeply checks that the provided node complies with the schema based on its identifier.
47
+ *
48
+ * @param onError - Called with the first error (if any).
49
+ *
50
+ * @returns the return value from `onError` if the node or anything inside of it is out of schema, otherwise `undefined`.
47
51
  */
48
- export function isNodeInSchema(
52
+ export function isNodeInSchema<T extends NotUndefined>(
49
53
  node: MinimalMapTreeNodeView,
50
54
  schemaAndPolicy: SchemaAndPolicy,
51
- ): SchemaValidationError | undefined {
55
+ onError: (error: SchemaValidationError) => T,
56
+ ): T | undefined {
52
57
  // Validate the schema declared by the node exists
53
58
  const schema = schemaAndPolicy.schema.nodeSchema.get(node.type);
54
59
  if (schema === undefined) {
55
- return SchemaValidationError.Node_MissingSchema;
60
+ return onError(SchemaValidationError.Node_MissingSchema);
56
61
  }
57
62
 
58
63
  // Validate the node is well formed according to its schema
59
64
 
60
65
  if (schema instanceof LeafNodeStoredSchema) {
61
66
  if (iterableHasSome(node.fields)) {
62
- return SchemaValidationError.LeafNode_FieldsNotAllowed;
67
+ return onError(SchemaValidationError.LeafNode_FieldsNotAllowed);
63
68
  }
64
69
  if (!allowsValue(schema.leafValue, node.value)) {
65
- return SchemaValidationError.LeafNode_InvalidValue;
70
+ return onError(SchemaValidationError.LeafNode_InvalidValue);
66
71
  }
67
72
  } else {
68
73
  if (node.value !== undefined) {
69
- return SchemaValidationError.NonLeafNode_ValueNotAllowed;
74
+ return onError(SchemaValidationError.NonLeafNode_ValueNotAllowed);
70
75
  }
71
76
 
72
77
  if (schema instanceof ObjectNodeStoredSchema) {
73
78
  const uncheckedFieldsFromNode = new Set(mapIterable(node.fields, ([key, field]) => key));
74
79
  for (const [fieldKey, fieldSchema] of schema.objectNodeFields) {
75
80
  const nodeField = node.fields.get(fieldKey) ?? [];
76
- const fieldInSchemaResult = isFieldInSchema(nodeField, fieldSchema, schemaAndPolicy);
81
+ const fieldInSchemaResult = isFieldInSchema(
82
+ nodeField,
83
+ fieldSchema,
84
+ schemaAndPolicy,
85
+ onError,
86
+ );
77
87
  if (fieldInSchemaResult !== undefined) {
78
88
  return fieldInSchemaResult;
79
89
  }
80
90
  uncheckedFieldsFromNode.delete(fieldKey);
81
91
  }
82
- // The node has fields that we did not check as part of looking at every field defined in the node's schema
83
- if (
84
- uncheckedFieldsFromNode.size !== 0 &&
85
- // TODO: AB#43547: This check is wrong. If a given view schema allows an unknown optional field, that does NOT mean the stored schema should allow unknown:
86
- // In-fact, any data the view schema does not know about must still comply with the stored schema:
87
- // if this were not the case schema evolution could not add any fields since they might already have out of schema data.
88
- !schemaAndPolicy.policy.allowUnknownOptionalFields(node.type)
89
- ) {
90
- return SchemaValidationError.ObjectNode_FieldNotInSchema;
92
+ // The node has fields that we did not check as part of looking at every field defined in the node's schema.
93
+ // Since this is testing compatibility with a stored schema (not view schema), "allowUnknownOptionalFields" does not exist at this layer.
94
+ // Code using this with a stored schema derived from a view schema rather than the document can be problematic because it may be missing unknown fields that the actual document has.
95
+ // Other schema evolution features like "staged" allowed types will likely cause similar issues elsewhere in this checker.
96
+ if (uncheckedFieldsFromNode.size !== 0) {
97
+ return onError(SchemaValidationError.ObjectNode_FieldNotInSchema);
91
98
  }
92
99
  } else if (schema instanceof MapNodeStoredSchema) {
93
100
  for (const [_key, field] of node.fields) {
94
- const fieldInSchemaResult = isFieldInSchema(field, schema.mapFields, schemaAndPolicy);
101
+ const fieldInSchemaResult = isFieldInSchema(
102
+ field,
103
+ schema.mapFields,
104
+ schemaAndPolicy,
105
+ onError,
106
+ );
95
107
  if (fieldInSchemaResult !== undefined) {
96
108
  return fieldInSchemaResult;
97
109
  }
@@ -106,34 +118,39 @@ export function isNodeInSchema(
106
118
 
107
119
  /**
108
120
  * Deeply checks that the nodes comply with the field schema and included schema.
121
+ *
122
+ * @param onError - Called with the first error (if any).
123
+ *
124
+ * @returns the return value from `onError` if the field or anything inside of it is out of schema, otherwise `undefined`.
109
125
  */
110
- export function isFieldInSchema(
126
+ export function isFieldInSchema<T extends NotUndefined>(
111
127
  childNodes: MapTreeFieldViewGeneric<MinimalMapTreeNodeView>,
112
128
  schema: TreeFieldStoredSchema,
113
129
  schemaAndPolicy: SchemaAndPolicy,
114
- ): SchemaValidationError | undefined {
130
+ onError: (error: SchemaValidationError) => T,
131
+ ): T | undefined {
115
132
  // Validate that the field kind is handled by the schema policy
116
133
  const kind = schemaAndPolicy.policy.fieldKinds.get(schema.kind);
117
134
  if (kind === undefined) {
118
- return SchemaValidationError.Field_KindNotInSchemaPolicy;
135
+ return onError(SchemaValidationError.Field_KindNotInSchemaPolicy);
119
136
  }
120
137
 
121
138
  // Validate that the field doesn't contain more nodes than its type supports
122
139
  {
123
140
  const multiplicityCheck = compliesWithMultiplicity(childNodes.length, kind.multiplicity);
124
141
  if (multiplicityCheck !== undefined) {
125
- return multiplicityCheck;
142
+ return onError(multiplicityCheck);
126
143
  }
127
144
  }
128
145
 
129
146
  for (const node of childNodes) {
130
147
  // Validate the type declared by the node is allowed in this field
131
148
  if (schema.types !== undefined && !schema.types.has(node.type)) {
132
- return SchemaValidationError.Field_NodeTypeNotAllowed;
149
+ return onError(SchemaValidationError.Field_NodeTypeNotAllowed);
133
150
  }
134
151
 
135
152
  // Validate the node complies with the type it declares to be.
136
- const nodeInSchemaResult = isNodeInSchema(node, schemaAndPolicy);
153
+ const nodeInSchemaResult = isNodeInSchema(node, schemaAndPolicy, onError);
137
154
  if (nodeInSchemaResult !== undefined) {
138
155
  return nodeInSchemaResult;
139
156
  }
@@ -136,7 +136,7 @@ export {
136
136
  SchemaValidationError,
137
137
  isNodeInSchema,
138
138
  isFieldInSchema,
139
- inSchemaOrThrow,
139
+ throwOutOfSchema,
140
140
  } from "./default-schema/index.js";
141
141
 
142
142
  export {
@@ -193,5 +193,3 @@ export {
193
193
  type TreeIndexKey,
194
194
  type TreeIndexNodes,
195
195
  } from "./indexing/index.js";
196
-
197
- export { initializeForest } from "./initializeForest.js";
@@ -23,7 +23,7 @@ import { withEditor } from "./fieldKindWithEditor.js";
23
23
  import { isNeverTree } from "./isNeverTree.js";
24
24
 
25
25
  /**
26
- * @returns true iff `superset` is a superset of `original`.
26
+ * Returns true iff `superset` is a superset of `original`.
27
27
  *
28
28
  * This does not require a strict (aka proper) superset: equivalent schema will return true.
29
29
  *
@@ -65,12 +65,7 @@ export function allowsTreeSuperset(
65
65
 
66
66
  if (original instanceof MapNodeStoredSchema) {
67
67
  if (superset instanceof MapNodeStoredSchema) {
68
- return allowsFieldSuperset(
69
- policy,
70
- originalData,
71
- normalizeField(original.mapFields),
72
- normalizeField(superset.mapFields),
73
- );
68
+ return allowsFieldSuperset(policy, originalData, original.mapFields, superset.mapFields);
74
69
  }
75
70
  return false;
76
71
  }
@@ -78,14 +73,7 @@ export function allowsTreeSuperset(
78
73
  assert(original instanceof ObjectNodeStoredSchema, 0x895 /* unsupported node kind */);
79
74
  if (superset instanceof MapNodeStoredSchema) {
80
75
  for (const [_key, field] of original.objectNodeFields) {
81
- if (
82
- !allowsFieldSuperset(
83
- policy,
84
- originalData,
85
- normalizeField(field),
86
- normalizeField(superset.mapFields),
87
- )
88
- ) {
76
+ if (!allowsFieldSuperset(policy, originalData, field, superset.mapFields)) {
89
77
  return false;
90
78
  }
91
79
  }
@@ -102,13 +90,13 @@ export function allowsTreeSuperset(
102
90
  originalData,
103
91
  original.objectNodeFields.get(originalField) ??
104
92
  fail(0xb17 /* missing expected field */),
105
- normalizeField(undefined),
93
+ storedEmptyFieldSchema,
106
94
  ),
107
95
  bExtra: (supersetField) =>
108
96
  allowsFieldSuperset(
109
97
  policy,
110
98
  originalData,
111
- normalizeField(undefined),
99
+ storedEmptyFieldSchema,
112
100
  superset.objectNodeFields.get(supersetField) ??
113
101
  fail(0xb18 /* missing expected field */),
114
102
  ),
@@ -123,7 +111,7 @@ export function allowsTreeSuperset(
123
111
  }
124
112
 
125
113
  /**
126
- * @returns true iff `superset` is a superset of `original`.
114
+ * Returns true iff `superset` is a superset of `original`.
127
115
  *
128
116
  * This does not require a strict (aka proper) superset: equivalent schema will return true.
129
117
  */
@@ -135,7 +123,7 @@ export function allowsValueSuperset(
135
123
  }
136
124
 
137
125
  /**
138
- * @returns true iff `superset` is a superset of `original`.
126
+ * Returns true iff `superset` is a superset of `original`.
139
127
  *
140
128
  * This does not require a strict (aka proper) superset: equivalent schema will return true.
141
129
  */
@@ -151,7 +139,7 @@ export function allowsFieldSuperset(
151
139
  }
152
140
 
153
141
  /**
154
- * @returns true iff `superset` is a superset of `original`.
142
+ * Returns true iff `superset` is a superset of `original`.
155
143
  *
156
144
  * This does not require a strict (aka proper) superset: equivalent schema will return true.
157
145
  */
@@ -168,7 +156,7 @@ export function allowsTreeSchemaIdentifierSuperset(
168
156
  }
169
157
 
170
158
  /**
171
- * @returns true iff `superset` is a superset of `original`.
159
+ * Returns true iff `superset` is a superset of `original`.
172
160
  *
173
161
  * This does not require a strict (aka proper) superset: equivalent schema will return true.
174
162
  *
@@ -182,7 +170,6 @@ export function allowsRepoSuperset(
182
170
  superset: TreeStoredSchema,
183
171
  ): boolean {
184
172
  {
185
- // TODO: I think its ok to use the field from superset here, but I should confirm it is, and document why.
186
173
  if (
187
174
  !allowsFieldSuperset(
188
175
  policy,
@@ -194,17 +181,15 @@ export function allowsRepoSuperset(
194
181
  return false;
195
182
  }
196
183
  }
184
+ // Check if all schema in original are included in superset, and permit a superset of the node content.
185
+ // Note that any schema from `original.nodeSchema` can be used as the schema for a node at the root of a detached field,
186
+ // so we must check all of them, even if they are not reachable from the root field schema.
197
187
  for (const [key, schema] of original.nodeSchema) {
198
- // TODO: I think its ok to use the tree from superset here, but I should confirm it is, and document why.
199
188
  if (!allowsTreeSuperset(policy, original, schema, superset.nodeSchema.get(key))) {
200
189
  return false;
201
190
  }
202
191
  }
192
+ // Any schema in superset not in original are already known to be superset of original since they are "never" due to being missing.
193
+ // Therefore, we do not need to check them.
203
194
  return true;
204
195
  }
205
-
206
- export function normalizeField(
207
- schema: TreeFieldStoredSchema | undefined,
208
- ): TreeFieldStoredSchema {
209
- return schema ?? storedEmptyFieldSchema;
210
- }
@@ -169,6 +169,12 @@ export interface FieldChangeRebaser<TChangeset> {
169
169
  oldRevisions: Set<RevisionTag | undefined>,
170
170
  newRevisions: RevisionTag | undefined,
171
171
  ): TChangeset;
172
+
173
+ /**
174
+ * Returns a copy of the given changeset with the same declarations (e.g., new cells) but no actual changes.
175
+ * This is a kludge. TODO: remove once AB#46104 is completed.
176
+ */
177
+ mute(change: TChangeset): TChangeset;
172
178
  }
173
179
 
174
180
  /**
@@ -179,11 +185,13 @@ export function referenceFreeFieldChangeRebaser<TChangeset>(data: {
179
185
  compose: (change1: TChangeset, change2: TChangeset) => TChangeset;
180
186
  invert: (change: TChangeset) => TChangeset;
181
187
  rebase: (change: TChangeset, over: TChangeset) => TChangeset;
188
+ mute: (change: TChangeset) => TChangeset;
182
189
  }): FieldChangeRebaser<TChangeset> {
183
190
  return isolatedFieldChangeRebaser({
184
191
  compose: (change1, change2, _composeChild, _genId) => data.compose(change1, change2),
185
192
  invert: (change, _invertChild, _genId) => data.invert(change),
186
193
  rebase: (change, over, _rebaseChild, _genId) => data.rebase(change, over),
194
+ mute: (change) => data.mute(change),
187
195
  });
188
196
  }
189
197
 
@@ -191,6 +199,7 @@ export function isolatedFieldChangeRebaser<TChangeset>(data: {
191
199
  compose: FieldChangeRebaser<TChangeset>["compose"];
192
200
  invert: FieldChangeRebaser<TChangeset>["invert"];
193
201
  rebase: FieldChangeRebaser<TChangeset>["rebase"];
202
+ mute: FieldChangeRebaser<TChangeset>["mute"];
194
203
  }): FieldChangeRebaser<TChangeset> {
195
204
  return {
196
205
  ...data,
@@ -39,6 +39,7 @@ export const genericChangeHandler: FieldChangeHandler<GenericChangeset> = {
39
39
  rebase: rebaseGenericChange,
40
40
  prune: pruneGenericChange,
41
41
  replaceRevisions,
42
+ mute: (change: GenericChangeset): GenericChangeset => change,
42
43
  },
43
44
  codecsFactory: makeGenericChangeCodec,
44
45
  editor: {