@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.
- package/.vscode/settings.json +0 -1
- package/CHANGELOG.md +43 -0
- package/api-report/tree.alpha.api.md +40 -30
- package/dist/alpha.d.ts +2 -1
- package/dist/codec/codec.d.ts +2 -1
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js +4 -3
- package/dist/codec/codec.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +3 -1
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +2 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +1 -23
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +2 -2
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +2 -3
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.js +68 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.js +55 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.js +49 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecs.js +26 -0
- package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
- package/dist/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +18 -13
- package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.js +12 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.js +14 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +21 -21
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +74 -61
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
- package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.js +18 -12
- package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
- package/{lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts → dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +23 -17
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -22
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +15 -2
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultSchema.js +0 -2
- package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/index.js +2 -2
- package/dist/feature-libraries/default-schema/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +31 -26
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -2
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +2 -4
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.d.ts +5 -6
- package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.js +15 -16
- package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -0
- package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +49 -20
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
- package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +2 -3
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +3 -0
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts +5 -3
- package/dist/jsonDomainSchema.d.ts.map +1 -1
- package/dist/jsonDomainSchema.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/independentView.d.ts +8 -0
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +23 -11
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +1 -1
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +0 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +9 -12
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +1 -29
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +20 -6
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +18 -7
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +2 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +32 -0
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +1 -1
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts +2 -2
- package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/conciseTree.js +6 -6
- package/dist/simple-tree/api/conciseTree.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +11 -2
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +5 -1
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +8 -7
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +33 -23
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +25 -4
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +42 -16
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/discrepancies.d.ts +94 -0
- package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/dist/simple-tree/api/discrepancies.js +256 -0
- package/dist/simple-tree/api/discrepancies.js.map +1 -0
- package/dist/simple-tree/api/index.d.ts +3 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +3 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +17 -117
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +16 -159
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +4 -47
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +33 -11
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js +1 -7
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/schemaStatics.d.ts +158 -0
- package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -0
- package/dist/simple-tree/api/schemaStatics.js +59 -0
- package/dist/simple-tree/api/schemaStatics.js.map +1 -0
- package/dist/simple-tree/api/storedSchema.d.ts +5 -3
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +9 -3
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts +2 -2
- package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js +16 -4
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts +2 -2
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +15 -15
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts +43 -11
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +51 -11
- package/dist/simple-tree/core/allowedTypes.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts +13 -2
- package/dist/simple-tree/core/context.d.ts.map +1 -1
- package/dist/simple-tree/core/context.js +22 -9
- package/dist/simple-tree/core/context.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +6 -4
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +8 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.js +7 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
- package/dist/simple-tree/core/toStored.d.ts +32 -0
- package/dist/simple-tree/core/toStored.d.ts.map +1 -0
- package/dist/simple-tree/core/toStored.js +37 -0
- package/dist/simple-tree/core/toStored.js.map +1 -0
- package/dist/simple-tree/core/treeNodeKernel.d.ts +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +7 -2
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts +7 -2
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +19 -4
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +22 -5
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +6 -2
- package/dist/simple-tree/core/walkSchema.js.map +1 -1
- package/dist/simple-tree/createContext.d.ts +2 -0
- package/dist/simple-tree/createContext.d.ts.map +1 -1
- package/dist/simple-tree/createContext.js +4 -2
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +1 -0
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.js +2 -1
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +7 -7
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +13 -8
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +1 -0
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +18 -4
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/index.js +1 -2
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +9 -2
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js +1 -2
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +3 -8
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +41 -44
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +9 -2
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +6 -6
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +19 -13
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/simpleSchema.d.ts +6 -21
- package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/simpleSchema.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +38 -11
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +71 -33
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/simple-tree/walkFieldSchema.d.ts +1 -0
- package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/walkFieldSchema.js +1 -0
- package/dist/simple-tree/walkFieldSchema.js.map +1 -1
- package/lib/alpha.d.ts +2 -1
- package/lib/codec/codec.d.ts +2 -1
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js +4 -3
- package/lib/codec/codec.js.map +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +3 -1
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +1 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +1 -23
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +2 -2
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +2 -3
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.js +64 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.js +51 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.js +45 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecs.js +21 -0
- package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
- package/lib/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +13 -10
- package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.js +9 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.js +11 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +19 -19
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +70 -57
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
- package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.js +17 -11
- package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
- package/{dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts → lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +21 -15
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +19 -19
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +15 -2
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultSchema.js +0 -2
- package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/index.js +1 -1
- package/lib/feature-libraries/default-schema/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +29 -24
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -2
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -2
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.d.ts +5 -6
- package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.js +14 -14
- package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -0
- package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +50 -21
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
- package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +3 -4
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +3 -0
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts +5 -3
- package/lib/jsonDomainSchema.d.ts.map +1 -1
- package/lib/jsonDomainSchema.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/independentView.d.ts +8 -0
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +21 -10
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +2 -2
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +0 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +10 -13
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +2 -30
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +20 -6
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +19 -8
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +2 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +33 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +1 -1
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts +2 -2
- package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/conciseTree.js +6 -6
- package/lib/simple-tree/api/conciseTree.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +11 -2
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +6 -2
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +8 -7
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +35 -25
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +25 -4
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +43 -17
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/discrepancies.d.ts +94 -0
- package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/lib/simple-tree/api/discrepancies.js +251 -0
- package/lib/simple-tree/api/discrepancies.js.map +1 -0
- package/lib/simple-tree/api/index.d.ts +3 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +2 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js +19 -119
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +16 -159
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +2 -45
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +23 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js +0 -5
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/schemaStatics.d.ts +158 -0
- package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -0
- package/lib/simple-tree/api/schemaStatics.js +56 -0
- package/lib/simple-tree/api/schemaStatics.js.map +1 -0
- package/lib/simple-tree/api/storedSchema.d.ts +5 -3
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +12 -6
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts +2 -2
- package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js +14 -2
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts +2 -2
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +9 -9
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts +43 -11
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +52 -11
- package/lib/simple-tree/core/allowedTypes.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts +13 -2
- package/lib/simple-tree/core/context.d.ts.map +1 -1
- package/lib/simple-tree/core/context.js +22 -9
- package/lib/simple-tree/core/context.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +6 -4
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +4 -3
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.js +6 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
- package/lib/simple-tree/core/toStored.d.ts +32 -0
- package/lib/simple-tree/core/toStored.d.ts.map +1 -0
- package/lib/simple-tree/core/toStored.js +32 -0
- package/lib/simple-tree/core/toStored.js.map +1 -0
- package/lib/simple-tree/core/treeNodeKernel.d.ts +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +7 -2
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts +7 -2
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +17 -3
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +22 -5
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +6 -2
- package/lib/simple-tree/core/walkSchema.js.map +1 -1
- package/lib/simple-tree/createContext.d.ts +2 -0
- package/lib/simple-tree/createContext.d.ts.map +1 -1
- package/lib/simple-tree/createContext.js +5 -3
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +1 -0
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.js +2 -1
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +7 -7
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +5 -5
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +2 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +21 -7
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/index.js +1 -1
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +12 -5
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +3 -8
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +19 -21
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +12 -5
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +6 -6
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +21 -15
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/simpleSchema.d.ts +6 -21
- package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/simpleSchema.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +38 -11
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +70 -34
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/simple-tree/walkFieldSchema.d.ts +1 -0
- package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/walkFieldSchema.js +1 -0
- package/lib/simple-tree/walkFieldSchema.js.map +1 -1
- package/package.json +23 -23
- package/src/codec/codec.ts +4 -3
- package/src/core/index.ts +2 -0
- package/src/core/rebase/index.ts +2 -0
- package/src/core/rebase/types.ts +4 -0
- package/src/core/schema-stored/schema.ts +2 -26
- package/src/core/tree/detachedFieldIndex.ts +4 -6
- package/src/core/tree/detachedFieldIndexCodecCommon.ts +87 -0
- package/src/core/tree/{detachedFieldIndexCodec.ts → detachedFieldIndexCodecV1.ts} +22 -68
- package/src/core/tree/detachedFieldIndexCodecV2.ts +72 -0
- package/src/core/tree/detachedFieldIndexCodecs.ts +44 -0
- package/src/core/tree/{detachedFieldIndexFormat.ts → detachedFieldIndexFormatCommon.ts} +32 -23
- package/src/core/tree/detachedFieldIndexFormatV1.ts +15 -0
- package/src/core/tree/detachedFieldIndexFormatV2.ts +17 -0
- package/src/feature-libraries/chunked-forest/codec/README.md +1 -1
- package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +25 -25
- package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -6
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +96 -73
- package/src/feature-libraries/chunked-forest/codec/format.ts +20 -14
- package/src/feature-libraries/chunked-forest/codec/{nodeShape.ts → nodeEncoder.ts} +23 -17
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +34 -34
- package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +5 -5
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +11 -0
- package/src/feature-libraries/default-schema/defaultSchema.ts +0 -2
- package/src/feature-libraries/default-schema/index.ts +1 -1
- package/src/feature-libraries/default-schema/schemaChecker.ts +47 -30
- package/src/feature-libraries/index.ts +1 -3
- package/src/feature-libraries/modular-schema/comparison.ts +14 -29
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +9 -0
- package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -0
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +61 -19
- package/src/feature-libraries/object-forest/objectForest.ts +10 -6
- package/src/feature-libraries/optional-field/optionalField.ts +4 -0
- package/src/feature-libraries/sequence-field/sequenceFieldChangeRebaser.ts +4 -0
- package/src/index.ts +7 -1
- package/src/jsonDomainSchema.ts +4 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +45 -19
- package/src/shared-tree/schematizeTree.ts +2 -2
- package/src/shared-tree/schematizingTreeView.ts +24 -15
- package/src/shared-tree/sharedTree.ts +2 -42
- package/src/shared-tree/treeAlpha.ts +48 -22
- package/src/shared-tree/treeCheckout.ts +54 -10
- package/src/shared-tree-core/branch.ts +1 -6
- package/src/simple-tree/api/conciseTree.ts +9 -7
- package/src/simple-tree/api/configuration.ts +18 -4
- package/src/simple-tree/api/create.ts +44 -36
- package/src/simple-tree/api/customTree.ts +59 -20
- package/src/simple-tree/api/discrepancies.ts +474 -0
- package/src/simple-tree/api/index.ts +2 -3
- package/src/simple-tree/api/schemaCompatibilityTester.ts +23 -151
- package/src/simple-tree/api/schemaFactory.ts +13 -254
- package/src/simple-tree/api/schemaFactoryAlpha.ts +174 -1
- package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -25
- package/src/simple-tree/api/schemaStatics.ts +291 -0
- package/src/simple-tree/api/storedSchema.ts +18 -14
- package/src/simple-tree/api/treeBeta.ts +24 -4
- package/src/simple-tree/api/verboseTree.ts +17 -8
- package/src/simple-tree/core/allowedTypes.ts +87 -34
- package/src/simple-tree/core/context.ts +24 -22
- package/src/simple-tree/core/index.ts +11 -2
- package/src/simple-tree/core/simpleNodeSchemaBase.ts +30 -0
- package/src/simple-tree/core/toStored.ts +58 -0
- package/src/simple-tree/core/treeNodeKernel.ts +1 -1
- package/src/simple-tree/core/treeNodeSchema.ts +8 -2
- package/src/simple-tree/core/treeNodeValid.ts +23 -4
- package/src/simple-tree/core/walkSchema.ts +26 -6
- package/src/simple-tree/createContext.ts +11 -3
- package/src/simple-tree/fieldSchema.ts +3 -1
- package/src/simple-tree/index.ts +19 -13
- package/src/simple-tree/leafNodeSchema.ts +2 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +64 -23
- package/src/simple-tree/node-kinds/index.ts +0 -1
- package/src/simple-tree/node-kinds/map/mapNode.ts +23 -2
- package/src/simple-tree/node-kinds/object/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +42 -30
- package/src/simple-tree/node-kinds/record/recordNode.ts +20 -2
- package/src/simple-tree/prepareForInsertion.ts +28 -15
- package/src/simple-tree/simpleSchema.ts +6 -26
- package/src/simple-tree/toStoredSchema.ts +110 -44
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +6 -2
- package/src/simple-tree/walkFieldSchema.ts +1 -0
- package/dist/core/tree/detachedFieldIndexCodec.d.ts +0 -11
- package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
- package/dist/core/tree/detachedFieldIndexCodec.js +0 -100
- package/dist/core/tree/detachedFieldIndexCodec.js.map +0 -1
- package/dist/core/tree/detachedFieldIndexFormat.d.ts +0 -33
- package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
- package/dist/core/tree/detachedFieldIndexFormat.js.map +0 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
- package/dist/feature-libraries/initializeForest.d.ts +0 -18
- package/dist/feature-libraries/initializeForest.d.ts.map +0 -1
- package/dist/feature-libraries/initializeForest.js +0 -35
- package/dist/feature-libraries/initializeForest.js.map +0 -1
- package/dist/simple-tree/discrepancies.d.ts +0 -167
- package/dist/simple-tree/discrepancies.d.ts.map +0 -1
- package/dist/simple-tree/discrepancies.js +0 -382
- package/dist/simple-tree/discrepancies.js.map +0 -1
- package/lib/core/tree/detachedFieldIndexCodec.d.ts +0 -11
- package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
- package/lib/core/tree/detachedFieldIndexCodec.js +0 -96
- package/lib/core/tree/detachedFieldIndexCodec.js.map +0 -1
- package/lib/core/tree/detachedFieldIndexFormat.d.ts +0 -33
- package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
- package/lib/core/tree/detachedFieldIndexFormat.js.map +0 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
- package/lib/feature-libraries/initializeForest.d.ts +0 -18
- package/lib/feature-libraries/initializeForest.d.ts.map +0 -1
- package/lib/feature-libraries/initializeForest.js +0 -31
- package/lib/feature-libraries/initializeForest.js.map +0 -1
- package/lib/simple-tree/discrepancies.d.ts +0 -167
- package/lib/simple-tree/discrepancies.d.ts.map +0 -1
- package/lib/simple-tree/discrepancies.js +0 -376
- package/lib/simple-tree/discrepancies.js.map +0 -1
- package/src/feature-libraries/initializeForest.ts +0 -55
- package/src/simple-tree/discrepancies.ts +0 -648
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { assert, fail, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
EmptyKey,
|
|
10
|
+
type FieldKey,
|
|
11
|
+
type FieldKindIdentifier,
|
|
12
|
+
forbiddenFieldKindIdentifier,
|
|
13
|
+
LeafNodeStoredSchema,
|
|
14
|
+
MapNodeStoredSchema,
|
|
15
|
+
ObjectNodeStoredSchema,
|
|
16
|
+
storedEmptyFieldSchema,
|
|
17
|
+
type TreeFieldStoredSchema,
|
|
18
|
+
type TreeNodeSchemaIdentifier,
|
|
19
|
+
type TreeNodeStoredSchema,
|
|
20
|
+
type TreeStoredSchema,
|
|
21
|
+
type TreeTypeSet,
|
|
22
|
+
type ValueSchema,
|
|
23
|
+
} from "../../core/index.js";
|
|
24
|
+
import { brand } from "../../util/index.js";
|
|
25
|
+
import {
|
|
26
|
+
NodeKind,
|
|
27
|
+
normalizeAnnotatedAllowedTypes,
|
|
28
|
+
type AnnotatedAllowedType,
|
|
29
|
+
type TreeNodeSchema,
|
|
30
|
+
} from "../core/index.js";
|
|
31
|
+
import {
|
|
32
|
+
isArrayNodeSchema,
|
|
33
|
+
isMapNodeSchema,
|
|
34
|
+
isObjectNodeSchema,
|
|
35
|
+
isRecordNodeSchema,
|
|
36
|
+
type ObjectNodeSchemaPrivate,
|
|
37
|
+
} from "../node-kinds/index.js";
|
|
38
|
+
import { convertFieldKind } from "../toStoredSchema.js";
|
|
39
|
+
import {
|
|
40
|
+
createFieldSchema,
|
|
41
|
+
FieldKind,
|
|
42
|
+
FieldSchemaAlpha,
|
|
43
|
+
type FieldSchema,
|
|
44
|
+
} from "../fieldSchema.js";
|
|
45
|
+
import { LeafNodeSchema } from "../leafNodeSchema.js";
|
|
46
|
+
import type { TreeSchema } from "./configuration.js";
|
|
47
|
+
import { tryStoredSchemaAsArray } from "./customTree.js";
|
|
48
|
+
import { FieldKinds } from "../../feature-libraries/index.js";
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Discriminated union (keyed on `mismatch`) of discrepancies between a view and stored schema which
|
|
52
|
+
* make it possible for content matching the stored schema to be incompatible with the view schema.
|
|
53
|
+
*/
|
|
54
|
+
export type Discrepancy = FieldDiscrepancy | NodeKindDiscrepancy;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* A discrepancy in the declaration of a field.
|
|
58
|
+
*/
|
|
59
|
+
export type FieldDiscrepancy =
|
|
60
|
+
| AllowedTypeDiscrepancy
|
|
61
|
+
| FieldKindDiscrepancy
|
|
62
|
+
| ValueSchemaDiscrepancy;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Information about where a field discrepancy is located within a collection of schema.
|
|
66
|
+
*/
|
|
67
|
+
export interface FieldDiscrepancyLocation {
|
|
68
|
+
/**
|
|
69
|
+
* The {@link TreeNodeSchemaIdentifier} that contains the discrepancy.
|
|
70
|
+
*
|
|
71
|
+
* Undefined iff the discrepancy is part of the root field schema.
|
|
72
|
+
*/
|
|
73
|
+
readonly identifier: TreeNodeSchemaIdentifier | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* The {@link FieldKey} for the field that contains the discrepancy.
|
|
76
|
+
* Undefined when:
|
|
77
|
+
* - the discrepancy is part of the root field schema
|
|
78
|
+
* - the discrepancy is for 'all fields' of a map node
|
|
79
|
+
*/
|
|
80
|
+
readonly fieldKey: FieldKey | undefined;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* A discrepancy in the allowed types of a field.
|
|
85
|
+
*
|
|
86
|
+
* @remarks
|
|
87
|
+
* This reports the symmetric difference of allowed types.
|
|
88
|
+
*/
|
|
89
|
+
export interface AllowedTypeDiscrepancy extends FieldDiscrepancyLocation {
|
|
90
|
+
readonly mismatch: "allowedTypes";
|
|
91
|
+
/**
|
|
92
|
+
* Annotated allowed types in viewed schema
|
|
93
|
+
* (excluding {@link SchemaStaticsAlpha.staged | staged} schema) which are not allowed in stored schema.
|
|
94
|
+
*/
|
|
95
|
+
readonly view: readonly AnnotatedAllowedType<TreeNodeSchema>[];
|
|
96
|
+
/**
|
|
97
|
+
* Allowed type identifiers in stored schema which are not allowed in view schema
|
|
98
|
+
* (including the view schema's {@link SchemaStaticsAlpha.staged | staged} schema).
|
|
99
|
+
*/
|
|
100
|
+
readonly stored: readonly TreeNodeSchemaIdentifier[];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Differences in `FieldKindIdentifier` between two schema.
|
|
105
|
+
*/
|
|
106
|
+
export interface FieldKindDiscrepancy extends FieldDiscrepancyLocation {
|
|
107
|
+
readonly mismatch: "fieldKind";
|
|
108
|
+
readonly view: FieldKindIdentifier;
|
|
109
|
+
readonly stored: FieldKindIdentifier;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Differences in the `ValueSchema` of two `LeafNodeStoredSchema` objects.
|
|
114
|
+
*/
|
|
115
|
+
export interface ValueSchemaDiscrepancy {
|
|
116
|
+
identifier: TreeNodeSchemaIdentifier;
|
|
117
|
+
mismatch: "valueSchema";
|
|
118
|
+
view: ValueSchema | undefined;
|
|
119
|
+
stored: ValueSchema | undefined;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Differences in the kind of node schema.
|
|
124
|
+
*
|
|
125
|
+
* Includes when stored object schema are expected to be compatible with an array node schema.
|
|
126
|
+
*/
|
|
127
|
+
export interface NodeKindDiscrepancy {
|
|
128
|
+
identifier: TreeNodeSchemaIdentifier;
|
|
129
|
+
mismatch: "nodeKind";
|
|
130
|
+
view: NodeKind;
|
|
131
|
+
stored: SchemaFactoryNodeKind;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
type SchemaFactoryNodeKind =
|
|
135
|
+
| typeof ObjectNodeStoredSchema
|
|
136
|
+
| typeof MapNodeStoredSchema
|
|
137
|
+
| typeof LeafNodeStoredSchema;
|
|
138
|
+
|
|
139
|
+
function getStoredNodeSchemaType(nodeSchema: TreeNodeStoredSchema): SchemaFactoryNodeKind {
|
|
140
|
+
if (nodeSchema instanceof ObjectNodeStoredSchema) {
|
|
141
|
+
return ObjectNodeStoredSchema;
|
|
142
|
+
}
|
|
143
|
+
if (nodeSchema instanceof MapNodeStoredSchema) {
|
|
144
|
+
return MapNodeStoredSchema;
|
|
145
|
+
}
|
|
146
|
+
if (nodeSchema instanceof LeafNodeStoredSchema) {
|
|
147
|
+
return LeafNodeStoredSchema;
|
|
148
|
+
}
|
|
149
|
+
fail(0xbe8 /* Invalid stored node schema type */);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function doesNodeKindMatchStoredNodeKind(
|
|
153
|
+
viewKind: NodeKind,
|
|
154
|
+
storedType: SchemaFactoryNodeKind,
|
|
155
|
+
): boolean {
|
|
156
|
+
switch (viewKind) {
|
|
157
|
+
case NodeKind.Leaf:
|
|
158
|
+
return storedType === LeafNodeStoredSchema;
|
|
159
|
+
case NodeKind.Array:
|
|
160
|
+
case NodeKind.Object:
|
|
161
|
+
return storedType === ObjectNodeStoredSchema;
|
|
162
|
+
case NodeKind.Map:
|
|
163
|
+
case NodeKind.Record:
|
|
164
|
+
return storedType === MapNodeStoredSchema;
|
|
165
|
+
default:
|
|
166
|
+
unreachableCase(viewKind);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Finds and reports discrepancies between a view schema and a stored schema which make "canView" false.
|
|
172
|
+
* @remarks
|
|
173
|
+
* See documentation on {@link Discrepancy} and its subtypes for details of possible discrepancies.
|
|
174
|
+
*/
|
|
175
|
+
export function* getDiscrepanciesInAllowedContent(
|
|
176
|
+
view: TreeSchema,
|
|
177
|
+
stored: TreeStoredSchema,
|
|
178
|
+
): Iterable<Discrepancy> {
|
|
179
|
+
// check root field discrepancies
|
|
180
|
+
yield* getFieldDiscrepancies(view.root, stored.rootFieldSchema, undefined, undefined);
|
|
181
|
+
|
|
182
|
+
// Check all of the stored nodes, including their fields for discrepancies.
|
|
183
|
+
for (const [identifier, storedSchema] of stored.nodeSchema) {
|
|
184
|
+
const viewSchema = view.definitions.get(identifier);
|
|
185
|
+
|
|
186
|
+
// if the view schema has a node that's also in the stored schema, check it.
|
|
187
|
+
if (viewSchema !== undefined) {
|
|
188
|
+
yield* getNodeDiscrepancies(identifier, viewSchema, storedSchema);
|
|
189
|
+
}
|
|
190
|
+
// Note that nodes that are missing in the view schema are only a problem if other stored schema nodes actually reference them which will produce its own discrepancy, so we can rely on that to produce any needed discrepancies.
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function* getNodeDiscrepancies(
|
|
195
|
+
identifier: TreeNodeSchemaIdentifier,
|
|
196
|
+
view: TreeNodeSchema,
|
|
197
|
+
stored: TreeNodeStoredSchema,
|
|
198
|
+
): Iterable<Discrepancy> {
|
|
199
|
+
if (!doesNodeKindMatchStoredNodeKind(view.kind, getStoredNodeSchemaType(stored))) {
|
|
200
|
+
yield {
|
|
201
|
+
identifier,
|
|
202
|
+
mismatch: "nodeKind",
|
|
203
|
+
view: view.kind,
|
|
204
|
+
stored: getStoredNodeSchemaType(stored),
|
|
205
|
+
};
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
switch (view.kind) {
|
|
210
|
+
case NodeKind.Object: {
|
|
211
|
+
assert(
|
|
212
|
+
isObjectNodeSchema(view),
|
|
213
|
+
0xbe9 /* schema with node kind of object must implement ObjectNodeSchema */,
|
|
214
|
+
);
|
|
215
|
+
yield* computeObjectNodeDiscrepancies(
|
|
216
|
+
identifier,
|
|
217
|
+
view,
|
|
218
|
+
stored as ObjectNodeStoredSchema,
|
|
219
|
+
);
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
case NodeKind.Array: {
|
|
223
|
+
assert(
|
|
224
|
+
isArrayNodeSchema(view),
|
|
225
|
+
0xbea /* schema with node kind of array must implement ArrayNodeSchema */,
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
const arrayStoredSchema = tryStoredSchemaAsArray(stored);
|
|
229
|
+
if (arrayStoredSchema === undefined) {
|
|
230
|
+
yield {
|
|
231
|
+
identifier,
|
|
232
|
+
mismatch: "nodeKind",
|
|
233
|
+
view: NodeKind.Array,
|
|
234
|
+
stored: getStoredNodeSchemaType(stored),
|
|
235
|
+
};
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
yield* getAllowedTypeDiscrepancies(
|
|
240
|
+
normalizeAnnotatedAllowedTypes(view.info).types,
|
|
241
|
+
arrayStoredSchema,
|
|
242
|
+
brand(view.identifier),
|
|
243
|
+
EmptyKey,
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
case NodeKind.Map: {
|
|
249
|
+
assert(
|
|
250
|
+
isMapNodeSchema(view),
|
|
251
|
+
0xbeb /* schema with node kind of map must implement MapNodeSchema */,
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
yield* getFieldDiscrepancies(
|
|
255
|
+
createFieldSchema(FieldKind.Optional, view.info),
|
|
256
|
+
(stored as MapNodeStoredSchema).mapFields,
|
|
257
|
+
identifier,
|
|
258
|
+
undefined,
|
|
259
|
+
);
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
case NodeKind.Record: {
|
|
263
|
+
assert(
|
|
264
|
+
isRecordNodeSchema(view),
|
|
265
|
+
0xbec /* schema with node kind of record must implement RecordNodeSchema */,
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
yield* getFieldDiscrepancies(
|
|
269
|
+
createFieldSchema(FieldKind.Optional, view.info),
|
|
270
|
+
(stored as MapNodeStoredSchema).mapFields,
|
|
271
|
+
identifier,
|
|
272
|
+
undefined,
|
|
273
|
+
);
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
case NodeKind.Leaf: {
|
|
277
|
+
assert(
|
|
278
|
+
view instanceof LeafNodeSchema,
|
|
279
|
+
0xbed /* schema with node kind of leaf must implement LeafNodeSchema */,
|
|
280
|
+
);
|
|
281
|
+
// TODO: leafKind seems like a bad name
|
|
282
|
+
const viewValue = view.leafKind;
|
|
283
|
+
const storedValue = (stored as LeafNodeStoredSchema).leafValue;
|
|
284
|
+
if (viewValue !== storedValue) {
|
|
285
|
+
yield {
|
|
286
|
+
identifier,
|
|
287
|
+
mismatch: "valueSchema",
|
|
288
|
+
view: viewValue,
|
|
289
|
+
stored: storedValue,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
default:
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Returns the allowed types that are not present in both the given view and stored schemas.
|
|
301
|
+
*/
|
|
302
|
+
export function findExtraAllowedTypes(
|
|
303
|
+
viewAllowedTypes: readonly AnnotatedAllowedType<TreeNodeSchema>[],
|
|
304
|
+
storedAllowedTypes: TreeTypeSet,
|
|
305
|
+
): Pick<AllowedTypeDiscrepancy, "view" | "stored"> {
|
|
306
|
+
const viewNodeSchemaIdentifiers = new Set(
|
|
307
|
+
viewAllowedTypes.map((value) => value.type.identifier),
|
|
308
|
+
);
|
|
309
|
+
|
|
310
|
+
// TODO:
|
|
311
|
+
// Add detecting which SchemaUpgrades have been made.
|
|
312
|
+
// When doing so, each will fall into one of three states: staged, partially applied, or fully applied.
|
|
313
|
+
// This would allow for nicer compatibility errors and more detailed compatibility status in the future.
|
|
314
|
+
const view = viewAllowedTypes.filter(
|
|
315
|
+
(value) =>
|
|
316
|
+
!storedAllowedTypes.has(brand(value.type.identifier)) &&
|
|
317
|
+
value.metadata.stagedSchemaUpgrade === undefined,
|
|
318
|
+
);
|
|
319
|
+
const stored = [...storedAllowedTypes].filter(
|
|
320
|
+
(value) => !viewNodeSchemaIdentifiers.has(value),
|
|
321
|
+
);
|
|
322
|
+
return { view, stored };
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* The function to track the discrepancies between a field view schema and a stored schema.
|
|
327
|
+
*
|
|
328
|
+
* @remarks
|
|
329
|
+
* This function yields discrepancies in the following cases:
|
|
330
|
+
* 1. If the view schema has allowed types that are not present in the stored schema.
|
|
331
|
+
* 2. If the stored schema has allowed types that are not present in the view schema.
|
|
332
|
+
* 3. If the field kind in the view schema is not compatible with the stored schema.
|
|
333
|
+
*
|
|
334
|
+
* This function does not recurse into the nodes of the view schema and only makes comparisons at the field level.
|
|
335
|
+
*
|
|
336
|
+
* @param fieldKey - If the key is missing, it indicates that this is the root field schema.
|
|
337
|
+
*/
|
|
338
|
+
function* getFieldDiscrepancies(
|
|
339
|
+
view: FieldSchema,
|
|
340
|
+
stored: TreeFieldStoredSchema,
|
|
341
|
+
identifier: TreeNodeSchemaIdentifier | undefined,
|
|
342
|
+
fieldKey: FieldKey | undefined,
|
|
343
|
+
): Iterable<FieldDiscrepancy> {
|
|
344
|
+
assert(
|
|
345
|
+
view instanceof FieldSchemaAlpha,
|
|
346
|
+
0xbee /* all field schema should be FieldSchemaAlpha */,
|
|
347
|
+
);
|
|
348
|
+
yield* getAllowedTypeDiscrepancies(
|
|
349
|
+
view.annotatedAllowedTypesNormalized.types,
|
|
350
|
+
stored.types,
|
|
351
|
+
identifier,
|
|
352
|
+
fieldKey,
|
|
353
|
+
);
|
|
354
|
+
|
|
355
|
+
const viewKind =
|
|
356
|
+
convertFieldKind.get(view.kind) ??
|
|
357
|
+
fail(0xbef /* A conversion from a FieldKind to a FlexFieldKind should exist */);
|
|
358
|
+
|
|
359
|
+
// This checks if the field kind in the view schema is not compatible with the stored schema.
|
|
360
|
+
if (viewKind.identifier !== stored.kind) {
|
|
361
|
+
yield {
|
|
362
|
+
identifier,
|
|
363
|
+
fieldKey,
|
|
364
|
+
mismatch: "fieldKind",
|
|
365
|
+
view: viewKind.identifier,
|
|
366
|
+
stored: stored.kind,
|
|
367
|
+
} satisfies FieldKindDiscrepancy;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* The function to track the discrepancies between a field view schema and a stored schema.
|
|
373
|
+
*
|
|
374
|
+
* @remarks
|
|
375
|
+
* This function yields discrepancies in the following cases:
|
|
376
|
+
* 1. If the view schema has allowed types that are not present in the stored schema.
|
|
377
|
+
* 2. If the stored schema has allowed types that are not present in the view schema.
|
|
378
|
+
*
|
|
379
|
+
* This function does not recurse into the nodes of the view schema and only makes comparisons at the field level.
|
|
380
|
+
*
|
|
381
|
+
* @param fieldKey - If the key is missing, it indicates that this is the root field schema.
|
|
382
|
+
*/
|
|
383
|
+
function* getAllowedTypeDiscrepancies(
|
|
384
|
+
view: readonly AnnotatedAllowedType<TreeNodeSchema>[],
|
|
385
|
+
stored: TreeTypeSet,
|
|
386
|
+
identifier: TreeNodeSchemaIdentifier | undefined,
|
|
387
|
+
fieldKey: FieldKey | undefined,
|
|
388
|
+
): Iterable<FieldDiscrepancy> {
|
|
389
|
+
const discrepancies = findExtraAllowedTypes(view, stored);
|
|
390
|
+
if (discrepancies.view.length > 0 || discrepancies.stored.length > 0) {
|
|
391
|
+
yield {
|
|
392
|
+
...discrepancies,
|
|
393
|
+
identifier,
|
|
394
|
+
fieldKey,
|
|
395
|
+
mismatch: "allowedTypes",
|
|
396
|
+
} satisfies AllowedTypeDiscrepancy;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Computes discrepancies between a view schema and a stored schema for nodes that are treated as object nodes in the stored schema.
|
|
402
|
+
* This includes both view object nodes and view array nodes.
|
|
403
|
+
*
|
|
404
|
+
* This function yields discrepancies in the following cases:
|
|
405
|
+
*
|
|
406
|
+
* 1. If the view schema has fields that are not present in the stored schema.
|
|
407
|
+
* 2. If the stored schema has fields that are not present in the view schema.
|
|
408
|
+
* 3. If the field kind or allowed types of a field in the view schema is not compatible with the stored schema.
|
|
409
|
+
*
|
|
410
|
+
* This function includes discrepancies within the common fields and their allowed types, but does NOT recurse to report and discrepancies within the node types referenced by those fields.
|
|
411
|
+
*/
|
|
412
|
+
function* computeObjectNodeDiscrepancies(
|
|
413
|
+
identifier: TreeNodeSchemaIdentifier,
|
|
414
|
+
view: ObjectNodeSchemaPrivate,
|
|
415
|
+
stored: ObjectNodeStoredSchema,
|
|
416
|
+
): Iterable<FieldDiscrepancy> {
|
|
417
|
+
/**
|
|
418
|
+
* Similar to the logic used for tracking discrepancies between two node schemas, we will identify
|
|
419
|
+
* three types of differences:
|
|
420
|
+
* 1. Fields that exist in the view schema but not in the stored schema.
|
|
421
|
+
* 2. Fields that exist in both schemas but have different contents.
|
|
422
|
+
* 3. Fields that exist in the stored schema but not in the view schema.
|
|
423
|
+
*
|
|
424
|
+
* First, the view schema is iterated to track the first two types of differences.
|
|
425
|
+
* Then, the stored schema is iterated to find the third type.
|
|
426
|
+
*/
|
|
427
|
+
|
|
428
|
+
const viewKeys = new Set<FieldKey>();
|
|
429
|
+
|
|
430
|
+
for (const [_, { storedKey: fieldKey, schema: fieldSchema }] of view.flexKeyMap) {
|
|
431
|
+
const storedSchema = stored.objectNodeFields.get(fieldKey);
|
|
432
|
+
viewKeys.add(fieldKey);
|
|
433
|
+
|
|
434
|
+
// If the view schema has a field that's not in the stored schema
|
|
435
|
+
if (storedSchema === undefined) {
|
|
436
|
+
const viewKind =
|
|
437
|
+
convertFieldKind.get(fieldSchema.kind) ??
|
|
438
|
+
fail(0xbf0 /* A conversion from a FieldKind to a FlexFieldKind should exist */);
|
|
439
|
+
yield {
|
|
440
|
+
identifier,
|
|
441
|
+
fieldKey,
|
|
442
|
+
mismatch: "fieldKind",
|
|
443
|
+
view: viewKind.identifier,
|
|
444
|
+
stored: storedEmptyFieldSchema.kind,
|
|
445
|
+
} satisfies FieldKindDiscrepancy;
|
|
446
|
+
} else {
|
|
447
|
+
yield* getFieldDiscrepancies(fieldSchema, storedSchema, identifier, fieldKey);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
for (const [fieldKey, schema] of stored.objectNodeFields) {
|
|
452
|
+
if (schema.kind === forbiddenFieldKindIdentifier) {
|
|
453
|
+
// In the stored schema the field is explicitly forbidden.
|
|
454
|
+
// This has the same semantics of the field not being mentioned in the stored schema,
|
|
455
|
+
// and thus can be skipped.
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// If the stored schema has a field that's not in the view schema
|
|
460
|
+
if (!viewKeys.has(fieldKey)) {
|
|
461
|
+
// When the application has opted into it, we allow viewing documents which have additional
|
|
462
|
+
// optional fields in the stored schema that are not present in the view schema.
|
|
463
|
+
if (!view.allowUnknownOptionalFields || schema.kind !== FieldKinds.optional.identifier) {
|
|
464
|
+
yield {
|
|
465
|
+
identifier,
|
|
466
|
+
fieldKey,
|
|
467
|
+
mismatch: "fieldKind",
|
|
468
|
+
view: storedEmptyFieldSchema.kind,
|
|
469
|
+
stored: schema.kind,
|
|
470
|
+
} satisfies FieldKindDiscrepancy;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
@@ -24,16 +24,15 @@ export type {
|
|
|
24
24
|
ITreeAlpha,
|
|
25
25
|
} from "./tree.js";
|
|
26
26
|
export { asTreeViewAlpha } from "./tree.js";
|
|
27
|
+
export { type SchemaStatics, schemaStatics } from "./schemaStatics.js";
|
|
27
28
|
export {
|
|
28
29
|
SchemaFactory,
|
|
29
30
|
type ScopedSchemaName,
|
|
30
31
|
type SchemaFactoryObjectOptions,
|
|
31
|
-
type SchemaStatics,
|
|
32
|
-
schemaStatics,
|
|
33
32
|
type NodeSchemaOptions,
|
|
34
33
|
type NodeSchemaOptionsAlpha,
|
|
35
34
|
} from "./schemaFactory.js";
|
|
36
|
-
export { SchemaFactoryAlpha } from "./schemaFactoryAlpha.js";
|
|
35
|
+
export { SchemaFactoryAlpha, type SchemaStaticsAlpha } from "./schemaFactoryAlpha.js";
|
|
37
36
|
export type {
|
|
38
37
|
ValidateRecursiveSchema,
|
|
39
38
|
FixRecursiveArraySchema,
|
|
@@ -3,39 +3,25 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
7
|
-
|
|
8
6
|
import type { TreeStoredSchema } from "../../core/index.js";
|
|
9
|
-
import {
|
|
10
|
-
allowsRepoSuperset,
|
|
11
|
-
FieldKinds,
|
|
12
|
-
type FullSchemaPolicy,
|
|
13
|
-
isNeverTree,
|
|
14
|
-
} from "../../feature-libraries/index.js";
|
|
15
|
-
import type { FieldSchema } from "../fieldSchema.js";
|
|
7
|
+
import { allowsRepoSuperset, defaultSchemaPolicy } from "../../feature-libraries/index.js";
|
|
16
8
|
|
|
17
9
|
import type { SchemaCompatibilityStatus } from "./tree.js";
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
getAllowedContentDiscrepancies,
|
|
22
|
-
PosetComparisonResult,
|
|
23
|
-
type FieldDiscrepancy,
|
|
24
|
-
} from "../discrepancies.js";
|
|
25
|
-
import { toStoredSchema } from "../toStoredSchema.js";
|
|
10
|
+
import { getDiscrepanciesInAllowedContent } from "./discrepancies.js";
|
|
11
|
+
import { toUpgradeSchema } from "../toStoredSchema.js";
|
|
12
|
+
import type { TreeSchema } from "./configuration.js";
|
|
26
13
|
|
|
27
14
|
/**
|
|
28
|
-
* A collection of View information for schema
|
|
15
|
+
* A collection of View information for schema
|
|
29
16
|
* @remarks
|
|
30
17
|
* This contains everything needed to determine compatibility with a given stored schema.
|
|
31
18
|
*/
|
|
32
19
|
export class SchemaCompatibilityTester {
|
|
33
|
-
/**
|
|
34
|
-
* @param viewSchemaRoot - Schema for the root field.
|
|
35
|
-
*/
|
|
36
20
|
public constructor(
|
|
37
|
-
|
|
38
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Schema for the view
|
|
23
|
+
*/
|
|
24
|
+
public readonly viewSchema: TreeSchema,
|
|
39
25
|
) {}
|
|
40
26
|
|
|
41
27
|
/**
|
|
@@ -51,147 +37,33 @@ export class SchemaCompatibilityTester {
|
|
|
51
37
|
public checkCompatibility(
|
|
52
38
|
stored: TreeStoredSchema,
|
|
53
39
|
): Omit<SchemaCompatibilityStatus, "canInitialize"> {
|
|
40
|
+
// The public API surface assumes defaultSchemaPolicy
|
|
41
|
+
const policy = defaultSchemaPolicy;
|
|
42
|
+
|
|
54
43
|
// View schema allows a subset of documents that stored schema does, and the discrepancies are allowed by policy
|
|
55
44
|
// determined by the view schema (i.e. objects with extra optional fields in the stored schema have opted into allowing this.
|
|
56
45
|
// In the future, this would also include things like:
|
|
57
46
|
// - fields with more allowed types in the stored schema than in the view schema have out-of-schema "unknown content" adapters
|
|
58
47
|
let canView = true;
|
|
59
|
-
// View schema allows a superset of documents that stored schema does, hence the document could be upgraded to use a persisted version
|
|
60
|
-
// of this view schema as its stored schema.
|
|
61
|
-
let canUpgrade = true;
|
|
62
|
-
|
|
63
|
-
const updateCompatibilityFromFieldDiscrepancy = (discrepancy: FieldDiscrepancy): void => {
|
|
64
|
-
switch (discrepancy.mismatch) {
|
|
65
|
-
case "allowedTypes": {
|
|
66
|
-
// Since we only track the symmetric difference between the allowed types in the view and
|
|
67
|
-
// stored schemas, it's sufficient to check if any extra allowed types still exist in the
|
|
68
|
-
// stored schema.
|
|
69
|
-
if (
|
|
70
|
-
discrepancy.stored.some(
|
|
71
|
-
(identifier) =>
|
|
72
|
-
!isNeverTree(this.policy, stored, stored.nodeSchema.get(identifier)),
|
|
73
|
-
)
|
|
74
|
-
) {
|
|
75
|
-
// Stored schema has extra allowed types that the view schema does not.
|
|
76
|
-
canUpgrade = false;
|
|
77
|
-
canView = false;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (discrepancy.view.length > 0) {
|
|
81
|
-
// View schema has extra allowed types that the stored schema does not.
|
|
82
|
-
canView = false;
|
|
83
|
-
}
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
case "fieldKind": {
|
|
87
|
-
const result = comparePosetElements(
|
|
88
|
-
discrepancy.stored,
|
|
89
|
-
discrepancy.view,
|
|
90
|
-
fieldRealizer,
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
if (result === PosetComparisonResult.Greater) {
|
|
94
|
-
// Stored schema is more relaxed than view schema.
|
|
95
|
-
canUpgrade = false;
|
|
96
|
-
if (
|
|
97
|
-
discrepancy.view === FieldKinds.forbidden.identifier &&
|
|
98
|
-
discrepancy.identifier !== undefined &&
|
|
99
|
-
this.policy.allowUnknownOptionalFields(discrepancy.identifier)
|
|
100
|
-
) {
|
|
101
|
-
// When the application has opted into it, we allow viewing documents which have additional
|
|
102
|
-
// optional fields in the stored schema that are not present in the view schema.
|
|
103
|
-
} else {
|
|
104
|
-
canView = false;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
48
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (result === PosetComparisonResult.Incomparable) {
|
|
114
|
-
canUpgrade = false;
|
|
115
|
-
canView = false;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
case "valueSchema": {
|
|
121
|
-
canView = false;
|
|
122
|
-
canUpgrade = false;
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
default:
|
|
126
|
-
unreachableCase(discrepancy);
|
|
127
|
-
}
|
|
128
|
-
};
|
|
49
|
+
for (const _discrepancy of getDiscrepanciesInAllowedContent(this.viewSchema, stored)) {
|
|
50
|
+
canView = false;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
129
53
|
|
|
130
|
-
|
|
131
|
-
if (!canView && !canUpgrade) {
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
54
|
+
const wouldUpgradeTo = toUpgradeSchema(this.viewSchema.root);
|
|
134
55
|
|
|
135
|
-
|
|
136
|
-
case "nodeKind": {
|
|
137
|
-
const storedNodeSchema = stored.nodeSchema.get(discrepancy.identifier);
|
|
138
|
-
// We conservatively do not allow node types to change.
|
|
139
|
-
// The only time this might be valid in the sense that the data canonically converts is converting an object node
|
|
140
|
-
// to a map node over the union of all the object fields' types.
|
|
141
|
-
if (discrepancy.stored === undefined) {
|
|
142
|
-
// View schema has added a node type that the stored schema doesn't know about.
|
|
143
|
-
// Note that all cases which trigger this should also trigger an AllowedTypeDiscrepancy (where the type is used).
|
|
144
|
-
// This means this case should be redundant and could be removed in the future if there is a reason to do so
|
|
145
|
-
// (like simplifying enablable type support).
|
|
146
|
-
// See the TODO in getAllowedContentDiscrepancies.
|
|
147
|
-
canView = false;
|
|
148
|
-
} else if (discrepancy.view === undefined) {
|
|
149
|
-
const storedIsNever =
|
|
150
|
-
storedNodeSchema !== undefined
|
|
151
|
-
? isNeverTree(this.policy, stored, storedNodeSchema)
|
|
152
|
-
: true;
|
|
153
|
-
if (!storedIsNever) {
|
|
154
|
-
// Stored schema has a node type that the view schema doesn't know about.
|
|
155
|
-
// The design of allowUnknownOptionalFields allows adding new optional content to types,
|
|
156
|
-
// and the new optional content can use new types.
|
|
157
|
-
// Therefore this case needs to be supported for viewing.
|
|
158
|
-
// However, it is not supported for upgrade as the stored document must be newer (or at least more general) than the view in this case.
|
|
159
|
-
// The fact that there might be removed trees with a root of this type which only appears in the stored schema is why this must set canUpgrade to false.
|
|
160
|
-
canUpgrade = false;
|
|
161
|
-
}
|
|
162
|
-
} else {
|
|
163
|
-
// Node type exists in both schemas but kind has changed. We conservatively never allow this.
|
|
164
|
-
// See note above about cases where this could be allowed if needed.
|
|
165
|
-
canView = false;
|
|
166
|
-
canUpgrade = false;
|
|
167
|
-
}
|
|
168
|
-
break;
|
|
169
|
-
}
|
|
170
|
-
case "valueSchema":
|
|
171
|
-
case "allowedTypes":
|
|
172
|
-
case "fieldKind": {
|
|
173
|
-
updateCompatibilityFromFieldDiscrepancy(discrepancy);
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
case "fields": {
|
|
177
|
-
discrepancy.differences.forEach(updateCompatibilityFromFieldDiscrepancy);
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
// No default
|
|
181
|
-
}
|
|
182
|
-
}
|
|
56
|
+
const canUpgrade = allowsRepoSuperset(policy, stored, wouldUpgradeTo);
|
|
183
57
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
);
|
|
189
|
-
}
|
|
58
|
+
// If true, then upgrading has no effect on what can be stored in the document.
|
|
59
|
+
// TODO: This should likely be changed to indicate up a schema upgrade would be a no-op, including stored schema metadata.
|
|
60
|
+
const isEquivalent =
|
|
61
|
+
canView && canUpgrade && allowsRepoSuperset(policy, wouldUpgradeTo, stored);
|
|
190
62
|
|
|
191
63
|
return {
|
|
192
64
|
canView,
|
|
193
65
|
canUpgrade,
|
|
194
|
-
isEquivalent
|
|
66
|
+
isEquivalent,
|
|
195
67
|
};
|
|
196
68
|
}
|
|
197
69
|
}
|