@fluidframework/tree 2.51.0 → 2.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +0 -1
- package/CHANGELOG.md +43 -0
- package/api-report/tree.alpha.api.md +3 -2
- 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 +14 -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/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/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/packageVersion.d.ts +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.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 +7 -10
- 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 +9 -4
- 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 +8 -2
- package/dist/simple-tree/api/configuration.d.ts.map +1 -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 +35 -22
- 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 +98 -0
- package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/dist/simple-tree/api/discrepancies.js +255 -0
- package/dist/simple-tree/api/discrepancies.js.map +1 -0
- 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 +18 -117
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +7 -4
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +5 -1
- 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 +10 -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 +20 -4
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +45 -13
- 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 +2 -2
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +3 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- 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/treeNodeValid.d.ts +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +8 -1
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +3 -0
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +2 -0
- 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 +3 -1
- 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 +1 -0
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +4 -4
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +7 -8
- package/dist/simple-tree/index.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 +1 -1
- 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/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 +2 -7
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +4 -18
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +5 -5
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +9 -3
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +3 -0
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +3 -0
- 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/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 +14 -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/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/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/packageVersion.d.ts +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.js +1 -1
- 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 +8 -11
- 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 +10 -5
- 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 +8 -2
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- 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 +38 -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 +98 -0
- package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/lib/simple-tree/{discrepancies.js → api/discrepancies.js} +80 -206
- package/lib/simple-tree/api/discrepancies.js.map +1 -0
- 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 -118
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +7 -4
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +6 -2
- 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 +8 -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 +20 -4
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +42 -12
- 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 +2 -2
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +2 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- 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/treeNodeValid.d.ts +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +8 -1
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +3 -0
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +2 -0
- 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 +3 -1
- 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 +1 -0
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +4 -4
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +4 -4
- package/lib/simple-tree/index.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 +1 -1
- 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/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 +2 -7
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +3 -16
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +5 -5
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +11 -5
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +3 -0
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +3 -0
- 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 +10 -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/object-forest/objectForest.ts +10 -6
- package/src/index.ts +5 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +45 -19
- package/src/shared-tree/schematizeTree.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +16 -13
- package/src/shared-tree/sharedTree.ts +2 -42
- package/src/shared-tree/treeAlpha.ts +30 -18
- 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 +8 -2
- package/src/simple-tree/api/create.ts +49 -36
- package/src/simple-tree/api/customTree.ts +59 -20
- package/src/simple-tree/{discrepancies.ts → api/discrepancies.ts} +128 -303
- package/src/simple-tree/api/schemaCompatibilityTester.ts +27 -151
- package/src/simple-tree/api/schemaFactory.ts +7 -4
- package/src/simple-tree/api/storedSchema.ts +6 -9
- package/src/simple-tree/api/treeBeta.ts +17 -4
- package/src/simple-tree/api/verboseTree.ts +17 -8
- package/src/simple-tree/core/allowedTypes.ts +54 -21
- package/src/simple-tree/core/context.ts +24 -22
- package/src/simple-tree/core/index.ts +2 -1
- package/src/simple-tree/core/treeNodeKernel.ts +1 -1
- package/src/simple-tree/core/treeNodeValid.ts +9 -2
- package/src/simple-tree/core/walkSchema.ts +3 -0
- package/src/simple-tree/createContext.ts +6 -1
- package/src/simple-tree/fieldSchema.ts +1 -0
- package/src/simple-tree/index.ts +5 -10
- package/src/simple-tree/node-kinds/array/arrayNode.ts +32 -19
- package/src/simple-tree/node-kinds/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +9 -27
- package/src/simple-tree/prepareForInsertion.ts +17 -9
- package/src/simple-tree/toStoredSchema.ts +3 -0
- 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.map +0 -1
- package/src/feature-libraries/initializeForest.ts +0 -55
|
@@ -3,12 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
assert,
|
|
8
|
-
debugAssert,
|
|
9
|
-
fail,
|
|
10
|
-
unreachableCase,
|
|
11
|
-
} from "@fluidframework/core-utils/internal";
|
|
6
|
+
import { assert, fail, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
12
7
|
|
|
13
8
|
import {
|
|
14
9
|
EmptyKey,
|
|
@@ -25,62 +20,38 @@ import {
|
|
|
25
20
|
type TreeStoredSchema,
|
|
26
21
|
type TreeTypeSet,
|
|
27
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,
|
|
28
30
|
} from "../core/index.js";
|
|
29
|
-
import { brand } from "../util/index.js";
|
|
30
|
-
import { NodeKind, type AnnotatedAllowedType, type TreeNodeSchema } from "./core/index.js";
|
|
31
31
|
import {
|
|
32
32
|
isArrayNodeSchema,
|
|
33
33
|
isMapNodeSchema,
|
|
34
34
|
isObjectNodeSchema,
|
|
35
35
|
isRecordNodeSchema,
|
|
36
|
-
type
|
|
37
|
-
} from "
|
|
38
|
-
import { convertFieldKind } from "
|
|
39
|
-
import { walkFieldSchema } from "./walkFieldSchema.js";
|
|
36
|
+
type ObjectNodeSchemaPrivate,
|
|
37
|
+
} from "../node-kinds/index.js";
|
|
38
|
+
import { convertFieldKind } from "../toStoredSchema.js";
|
|
40
39
|
import {
|
|
41
40
|
createFieldSchema,
|
|
42
41
|
FieldKind,
|
|
43
42
|
FieldSchemaAlpha,
|
|
44
43
|
type FieldSchema,
|
|
45
|
-
} from "
|
|
46
|
-
import { LeafNodeSchema } from "
|
|
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";
|
|
47
49
|
|
|
48
50
|
/**
|
|
49
|
-
* Discriminated union (keyed on `mismatch`) of discrepancies between a view and stored schema
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* 1. FieldDiscrepancy
|
|
53
|
-
*
|
|
54
|
-
* `FieldDiscrepancy` represents the differences between two `TreeFieldStoredSchema` objects. It consists of
|
|
55
|
-
* three types of incompatibilities:
|
|
56
|
-
*
|
|
57
|
-
* - FieldKindDiscrepancy: Indicates the differences in `FieldKindIdentifier` between two `TreeFieldStoredSchema`
|
|
58
|
-
* objects (e.g., optional, required, sequence, etc.).
|
|
59
|
-
* - AllowedTypesDiscrepancy: Indicates the differences in the allowed child types between the two schemas.
|
|
60
|
-
* - ValueSchemaDiscrepancy: Specifically indicates the differences in the `ValueSchema` of two
|
|
61
|
-
* `LeafNodeStoredSchema` objects.
|
|
62
|
-
*
|
|
63
|
-
* 2. NodeDiscrepancy
|
|
64
|
-
*
|
|
65
|
-
* `NodeDiscrepancy` represents the differences between two `TreeNodeStoredSchema` objects and includes:
|
|
66
|
-
*
|
|
67
|
-
* - NodeKindDiscrepancy: Indicates the differences in the types of `TreeNodeStoredSchema` (currently supports
|
|
68
|
-
* `ObjectNodeStoredSchema`, `MapNodeStoredSchema`, and `LeafNodeStoredSchema`).
|
|
69
|
-
* - NodeFieldsDiscrepancy: Indicates the `FieldDiscrepancy` of `TreeFieldStoredSchema` within two
|
|
70
|
-
* `TreeNodeStoredSchema`. It includes an array of `FieldDiscrepancy` instances in the `differences` field.
|
|
71
|
-
*
|
|
72
|
-
* When comparing two nodes for compatibility, it only makes sense to compare their fields if the nodes are of
|
|
73
|
-
* the same kind (map, object, leaf).
|
|
74
|
-
*
|
|
75
|
-
* 3. Discrepancy
|
|
76
|
-
*
|
|
77
|
-
* Discrepancy consists of both `NodeDiscrepancy` and `FieldDiscrepancy`, representing any kind of
|
|
78
|
-
* schema differences. See {@link getAllowedContentDiscrepancies} for more details about how we process it
|
|
79
|
-
* and the ordering.
|
|
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.
|
|
80
53
|
*/
|
|
81
|
-
export type Discrepancy = FieldDiscrepancy |
|
|
82
|
-
|
|
83
|
-
export type NodeDiscrepancy = NodeKindDiscrepancy | NodeFieldsDiscrepancy;
|
|
54
|
+
export type Discrepancy = FieldDiscrepancy | NodeKindDiscrepancy;
|
|
84
55
|
|
|
85
56
|
/**
|
|
86
57
|
* A discrepancy in the declaration of a field.
|
|
@@ -113,7 +84,7 @@ export interface FieldDiscrepancyLocation {
|
|
|
113
84
|
* A discrepancy in the allowed types of a field.
|
|
114
85
|
*
|
|
115
86
|
* @remarks
|
|
116
|
-
* This reports the symmetric difference of allowed types
|
|
87
|
+
* This reports the symmetric difference of allowed types.
|
|
117
88
|
*/
|
|
118
89
|
export interface AllowedTypeDiscrepancy extends FieldDiscrepancyLocation {
|
|
119
90
|
readonly mismatch: "allowedTypes";
|
|
@@ -127,12 +98,18 @@ export interface AllowedTypeDiscrepancy extends FieldDiscrepancyLocation {
|
|
|
127
98
|
readonly stored: readonly TreeNodeSchemaIdentifier[];
|
|
128
99
|
}
|
|
129
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Differences in `FieldKindIdentifier` between two schema.
|
|
103
|
+
*/
|
|
130
104
|
export interface FieldKindDiscrepancy extends FieldDiscrepancyLocation {
|
|
131
105
|
readonly mismatch: "fieldKind";
|
|
132
106
|
readonly view: FieldKindIdentifier;
|
|
133
107
|
readonly stored: FieldKindIdentifier;
|
|
134
108
|
}
|
|
135
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Differences in the `ValueSchema` of two `LeafNodeStoredSchema` objects.
|
|
112
|
+
*/
|
|
136
113
|
export interface ValueSchemaDiscrepancy {
|
|
137
114
|
identifier: TreeNodeSchemaIdentifier;
|
|
138
115
|
mismatch: "valueSchema";
|
|
@@ -140,17 +117,16 @@ export interface ValueSchemaDiscrepancy {
|
|
|
140
117
|
stored: ValueSchema | undefined;
|
|
141
118
|
}
|
|
142
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Differences in the kind of node schema.
|
|
122
|
+
*
|
|
123
|
+
* Includes when stored object schema are expected to be compatible with an array node schema.
|
|
124
|
+
*/
|
|
143
125
|
export interface NodeKindDiscrepancy {
|
|
144
126
|
identifier: TreeNodeSchemaIdentifier;
|
|
145
127
|
mismatch: "nodeKind";
|
|
146
|
-
view:
|
|
147
|
-
stored: SchemaFactoryNodeKind
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export interface NodeFieldsDiscrepancy {
|
|
151
|
-
identifier: TreeNodeSchemaIdentifier;
|
|
152
|
-
mismatch: "fields";
|
|
153
|
-
differences: FieldDiscrepancy[];
|
|
128
|
+
view: NodeKind;
|
|
129
|
+
stored: SchemaFactoryNodeKind;
|
|
154
130
|
}
|
|
155
131
|
|
|
156
132
|
type SchemaFactoryNodeKind =
|
|
@@ -189,81 +165,27 @@ function doesNodeKindMatchStoredNodeKind(
|
|
|
189
165
|
}
|
|
190
166
|
}
|
|
191
167
|
|
|
192
|
-
function getViewNodeSchemaType(schema: TreeNodeSchema): SchemaFactoryNodeKind {
|
|
193
|
-
switch (schema.kind) {
|
|
194
|
-
case NodeKind.Leaf: {
|
|
195
|
-
return LeafNodeStoredSchema;
|
|
196
|
-
}
|
|
197
|
-
case NodeKind.Map:
|
|
198
|
-
case NodeKind.Record: {
|
|
199
|
-
return MapNodeStoredSchema;
|
|
200
|
-
}
|
|
201
|
-
case NodeKind.Object:
|
|
202
|
-
case NodeKind.Array: {
|
|
203
|
-
return ObjectNodeStoredSchema;
|
|
204
|
-
}
|
|
205
|
-
default:
|
|
206
|
-
unreachableCase(schema.kind);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
168
|
/**
|
|
211
|
-
* Finds and reports discrepancies between a view schema and a stored schema.
|
|
212
|
-
*
|
|
213
|
-
* See documentation on {@link Discrepancy} for details of possible discrepancies.
|
|
169
|
+
* Finds and reports discrepancies between a view schema and a stored schema which make "canView" false.
|
|
214
170
|
* @remarks
|
|
215
|
-
*
|
|
216
|
-
* For example, a Forbidden field with allowed type set `[]` is equivalent to an optional field with allowed type set `[]`,
|
|
217
|
-
* as well as an optional field with an allowed type set containing only unconstructable types.
|
|
218
|
-
*
|
|
219
|
-
* It is up to the caller to determine whether such discrepancies matter.
|
|
171
|
+
* See documentation on {@link Discrepancy} and its subtypes for details of possible discrepancies.
|
|
220
172
|
*/
|
|
221
|
-
export function*
|
|
222
|
-
view:
|
|
173
|
+
export function* getDiscrepanciesInAllowedContent(
|
|
174
|
+
view: TreeSchema,
|
|
223
175
|
stored: TreeStoredSchema,
|
|
224
176
|
): Iterable<Discrepancy> {
|
|
225
|
-
// check root
|
|
226
|
-
yield* getFieldDiscrepancies(view, stored.rootFieldSchema, undefined, undefined);
|
|
227
|
-
|
|
228
|
-
const viewNodeSchema = new Map<TreeNodeSchemaIdentifier, TreeNodeSchema>();
|
|
177
|
+
// check root field discrepancies
|
|
178
|
+
yield* getFieldDiscrepancies(view.root, stored.rootFieldSchema, undefined, undefined);
|
|
229
179
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
debugAssert(() => !viewNodeSchema.has(identifier));
|
|
235
|
-
viewNodeSchema.set(identifier, schema);
|
|
236
|
-
},
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
for (const [identifier, viewSchema] of viewNodeSchema) {
|
|
240
|
-
const storedSchema = stored.nodeSchema.get(identifier);
|
|
180
|
+
// Check all of the stored nodes, including their fields for discrepancies.
|
|
181
|
+
for (const [identifier, storedSchema] of stored.nodeSchema) {
|
|
182
|
+
const viewSchema = view.definitions.get(identifier);
|
|
241
183
|
|
|
242
|
-
// if the view schema has a node that's
|
|
243
|
-
if (
|
|
244
|
-
const viewType = getViewNodeSchemaType(viewSchema);
|
|
245
|
-
// TODO does it make sense to have this mismatch when there will also be an allowedTypes mismatch?
|
|
246
|
-
yield {
|
|
247
|
-
identifier,
|
|
248
|
-
mismatch: "nodeKind",
|
|
249
|
-
view: viewType,
|
|
250
|
-
stored: undefined,
|
|
251
|
-
};
|
|
252
|
-
} else {
|
|
184
|
+
// if the view schema has a node that's also in the stored schema, check it.
|
|
185
|
+
if (viewSchema !== undefined) {
|
|
253
186
|
yield* getNodeDiscrepancies(identifier, viewSchema, storedSchema);
|
|
254
187
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
for (const [identifier, storedSchema] of stored.nodeSchema) {
|
|
258
|
-
if (!viewNodeSchema.has(identifier)) {
|
|
259
|
-
const storedType = getStoredNodeSchemaType(storedSchema);
|
|
260
|
-
yield {
|
|
261
|
-
identifier,
|
|
262
|
-
mismatch: "nodeKind",
|
|
263
|
-
view: undefined,
|
|
264
|
-
stored: storedType,
|
|
265
|
-
};
|
|
266
|
-
}
|
|
188
|
+
// 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.
|
|
267
189
|
}
|
|
268
190
|
}
|
|
269
191
|
|
|
@@ -276,7 +198,7 @@ function* getNodeDiscrepancies(
|
|
|
276
198
|
yield {
|
|
277
199
|
identifier,
|
|
278
200
|
mismatch: "nodeKind",
|
|
279
|
-
view:
|
|
201
|
+
view: view.kind,
|
|
280
202
|
stored: getStoredNodeSchemaType(stored),
|
|
281
203
|
};
|
|
282
204
|
return;
|
|
@@ -288,18 +210,11 @@ function* getNodeDiscrepancies(
|
|
|
288
210
|
isObjectNodeSchema(view),
|
|
289
211
|
0xbe9 /* schema with node kind of object must implement ObjectNodeSchema */,
|
|
290
212
|
);
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
213
|
+
yield* computeObjectNodeDiscrepancies(
|
|
214
|
+
identifier,
|
|
215
|
+
view,
|
|
216
|
+
stored as ObjectNodeStoredSchema,
|
|
294
217
|
);
|
|
295
|
-
|
|
296
|
-
if (differences.length > 0) {
|
|
297
|
-
yield {
|
|
298
|
-
identifier,
|
|
299
|
-
mismatch: "fields",
|
|
300
|
-
differences,
|
|
301
|
-
} satisfies NodeFieldsDiscrepancy;
|
|
302
|
-
}
|
|
303
218
|
break;
|
|
304
219
|
}
|
|
305
220
|
case NodeKind.Array: {
|
|
@@ -307,32 +222,25 @@ function* getNodeDiscrepancies(
|
|
|
307
222
|
isArrayNodeSchema(view),
|
|
308
223
|
0xbea /* schema with node kind of array must implement ArrayNodeSchema */,
|
|
309
224
|
);
|
|
310
|
-
const fields: SimpleKeyMap = new Map([
|
|
311
|
-
[
|
|
312
|
-
EmptyKey,
|
|
313
|
-
{
|
|
314
|
-
storedKey: EmptyKey,
|
|
315
|
-
schema: createFieldSchema(FieldKind.Optional, view.info),
|
|
316
|
-
},
|
|
317
|
-
],
|
|
318
|
-
]);
|
|
319
|
-
|
|
320
|
-
const differences = Array.from(
|
|
321
|
-
computeObjectNodeDiscrepancies(
|
|
322
|
-
identifier,
|
|
323
|
-
fields,
|
|
324
|
-
stored as ObjectNodeStoredSchema,
|
|
325
|
-
true,
|
|
326
|
-
),
|
|
327
|
-
);
|
|
328
225
|
|
|
329
|
-
|
|
226
|
+
const arrayStoredSchema = tryStoredSchemaAsArray(stored);
|
|
227
|
+
if (arrayStoredSchema === undefined) {
|
|
330
228
|
yield {
|
|
331
229
|
identifier,
|
|
332
|
-
mismatch: "
|
|
333
|
-
|
|
334
|
-
|
|
230
|
+
mismatch: "nodeKind",
|
|
231
|
+
view: NodeKind.Array,
|
|
232
|
+
stored: getStoredNodeSchemaType(stored),
|
|
233
|
+
};
|
|
234
|
+
return;
|
|
335
235
|
}
|
|
236
|
+
|
|
237
|
+
yield* getAllowedTypeDiscrepancies(
|
|
238
|
+
normalizeAnnotatedAllowedTypes(view.info).types,
|
|
239
|
+
arrayStoredSchema,
|
|
240
|
+
brand(view.identifier),
|
|
241
|
+
EmptyKey,
|
|
242
|
+
);
|
|
243
|
+
|
|
336
244
|
break;
|
|
337
245
|
}
|
|
338
246
|
case NodeKind.Map: {
|
|
@@ -395,17 +303,21 @@ function* getNodeDiscrepancies(
|
|
|
395
303
|
export function findExtraAllowedTypes(
|
|
396
304
|
viewAllowedTypes: readonly AnnotatedAllowedType<TreeNodeSchema>[],
|
|
397
305
|
storedAllowedTypes: TreeTypeSet,
|
|
398
|
-
):
|
|
306
|
+
): {
|
|
307
|
+
viewExtra: readonly AnnotatedAllowedType<TreeNodeSchema>[];
|
|
308
|
+
storedExtra: TreeNodeSchemaIdentifier[];
|
|
309
|
+
} {
|
|
399
310
|
const viewNodeSchemaIdentifiers = new Set(
|
|
400
311
|
viewAllowedTypes.map((value) => value.type.identifier),
|
|
401
312
|
);
|
|
402
|
-
|
|
313
|
+
|
|
314
|
+
const viewExtra = viewAllowedTypes.filter(
|
|
403
315
|
(value) => !storedAllowedTypes.has(brand(value.type.identifier)),
|
|
404
316
|
);
|
|
405
|
-
const
|
|
317
|
+
const storedExtra = [...storedAllowedTypes].filter(
|
|
406
318
|
(value) => !viewNodeSchemaIdentifiers.has(value),
|
|
407
319
|
);
|
|
408
|
-
return
|
|
320
|
+
return { viewExtra, storedExtra };
|
|
409
321
|
}
|
|
410
322
|
|
|
411
323
|
/**
|
|
@@ -419,44 +331,31 @@ export function findExtraAllowedTypes(
|
|
|
419
331
|
*
|
|
420
332
|
* This function does not recurse into the nodes of the view schema and only makes comparisons at the field level.
|
|
421
333
|
*
|
|
422
|
-
* @param
|
|
334
|
+
* @param fieldKey - If the key is missing, it indicates that this is the root field schema.
|
|
423
335
|
*/
|
|
424
336
|
function* getFieldDiscrepancies(
|
|
425
337
|
view: FieldSchema,
|
|
426
338
|
stored: TreeFieldStoredSchema,
|
|
427
339
|
identifier: TreeNodeSchemaIdentifier | undefined,
|
|
428
340
|
fieldKey: FieldKey | undefined,
|
|
429
|
-
// TODO: This is a temporary workaround until the comparison logic is redesigned.
|
|
430
|
-
viewKindIsSequence = false,
|
|
431
341
|
): Iterable<FieldDiscrepancy> {
|
|
432
342
|
assert(
|
|
433
343
|
view instanceof FieldSchemaAlpha,
|
|
434
344
|
0xbee /* all field schema should be FieldSchemaAlpha */,
|
|
435
345
|
);
|
|
436
|
-
|
|
346
|
+
yield* getAllowedTypeDiscrepancies(
|
|
437
347
|
view.annotatedAllowedTypesNormalized.types,
|
|
438
348
|
stored.types,
|
|
349
|
+
identifier,
|
|
350
|
+
fieldKey,
|
|
439
351
|
);
|
|
440
|
-
if (viewExtra.length > 0 || storedExtra.length > 0) {
|
|
441
|
-
yield {
|
|
442
|
-
identifier,
|
|
443
|
-
fieldKey,
|
|
444
|
-
mismatch: "allowedTypes",
|
|
445
|
-
view: viewExtra,
|
|
446
|
-
stored: storedExtra,
|
|
447
|
-
} satisfies AllowedTypeDiscrepancy;
|
|
448
|
-
}
|
|
449
352
|
|
|
450
353
|
const viewKind =
|
|
451
354
|
convertFieldKind.get(view.kind) ??
|
|
452
355
|
fail(0xbef /* A conversion from a FieldKind to a FlexFieldKind should exist */);
|
|
453
356
|
|
|
454
357
|
// This checks if the field kind in the view schema is not compatible with the stored schema.
|
|
455
|
-
|
|
456
|
-
if (
|
|
457
|
-
(viewKindIsSequence && stored.kind !== "Sequence") ||
|
|
458
|
-
(!viewKindIsSequence && viewKind.identifier !== stored.kind)
|
|
459
|
-
) {
|
|
358
|
+
if (viewKind.identifier !== stored.kind) {
|
|
460
359
|
yield {
|
|
461
360
|
identifier,
|
|
462
361
|
fieldKey,
|
|
@@ -467,6 +366,36 @@ function* getFieldDiscrepancies(
|
|
|
467
366
|
}
|
|
468
367
|
}
|
|
469
368
|
|
|
369
|
+
/**
|
|
370
|
+
* The function to track the discrepancies between a field view schema and a stored schema.
|
|
371
|
+
*
|
|
372
|
+
* @remarks
|
|
373
|
+
* This function yields discrepancies in the following cases:
|
|
374
|
+
* 1. If the view schema has allowed types that are not present in the stored schema.
|
|
375
|
+
* 2. If the stored schema has allowed types that are not present in the view schema.
|
|
376
|
+
*
|
|
377
|
+
* This function does not recurse into the nodes of the view schema and only makes comparisons at the field level.
|
|
378
|
+
*
|
|
379
|
+
* @param fieldKey - If the key is missing, it indicates that this is the root field schema.
|
|
380
|
+
*/
|
|
381
|
+
function* getAllowedTypeDiscrepancies(
|
|
382
|
+
view: readonly AnnotatedAllowedType<TreeNodeSchema>[],
|
|
383
|
+
stored: TreeTypeSet,
|
|
384
|
+
identifier: TreeNodeSchemaIdentifier | undefined,
|
|
385
|
+
fieldKey: FieldKey | undefined,
|
|
386
|
+
): Iterable<FieldDiscrepancy> {
|
|
387
|
+
const { viewExtra, storedExtra } = findExtraAllowedTypes(view, stored);
|
|
388
|
+
if (viewExtra.length > 0 || storedExtra.length > 0) {
|
|
389
|
+
yield {
|
|
390
|
+
identifier,
|
|
391
|
+
fieldKey,
|
|
392
|
+
mismatch: "allowedTypes",
|
|
393
|
+
view: viewExtra,
|
|
394
|
+
stored: storedExtra,
|
|
395
|
+
} satisfies AllowedTypeDiscrepancy;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
470
399
|
/**
|
|
471
400
|
* Computes discrepancies between a view schema and a stored schema for nodes that are treated as object nodes in the stored schema.
|
|
472
401
|
* This includes both view object nodes and view array nodes.
|
|
@@ -481,9 +410,8 @@ function* getFieldDiscrepancies(
|
|
|
481
410
|
*/
|
|
482
411
|
function* computeObjectNodeDiscrepancies(
|
|
483
412
|
identifier: TreeNodeSchemaIdentifier,
|
|
484
|
-
view:
|
|
413
|
+
view: ObjectNodeSchemaPrivate,
|
|
485
414
|
stored: ObjectNodeStoredSchema,
|
|
486
|
-
viewKindIsSequence = false,
|
|
487
415
|
): Iterable<FieldDiscrepancy> {
|
|
488
416
|
/**
|
|
489
417
|
* Similar to the logic used for tracking discrepancies between two node schemas, we will identify
|
|
@@ -498,7 +426,7 @@ function* computeObjectNodeDiscrepancies(
|
|
|
498
426
|
|
|
499
427
|
const viewKeys = new Set<FieldKey>();
|
|
500
428
|
|
|
501
|
-
for (const [_, { storedKey: fieldKey, schema: fieldSchema }] of view) {
|
|
429
|
+
for (const [_, { storedKey: fieldKey, schema: fieldSchema }] of view.flexKeyMap) {
|
|
502
430
|
const storedSchema = stored.objectNodeFields.get(fieldKey);
|
|
503
431
|
viewKeys.add(fieldKey);
|
|
504
432
|
|
|
@@ -515,134 +443,31 @@ function* computeObjectNodeDiscrepancies(
|
|
|
515
443
|
stored: storedEmptyFieldSchema.kind,
|
|
516
444
|
} satisfies FieldKindDiscrepancy;
|
|
517
445
|
} else {
|
|
518
|
-
yield* getFieldDiscrepancies(
|
|
519
|
-
fieldSchema,
|
|
520
|
-
storedSchema,
|
|
521
|
-
identifier,
|
|
522
|
-
fieldKey,
|
|
523
|
-
viewKindIsSequence,
|
|
524
|
-
);
|
|
446
|
+
yield* getFieldDiscrepancies(fieldSchema, storedSchema, identifier, fieldKey);
|
|
525
447
|
}
|
|
526
448
|
}
|
|
527
449
|
|
|
528
450
|
for (const [fieldKey, schema] of stored.objectNodeFields) {
|
|
451
|
+
if (schema.kind === forbiddenFieldKindIdentifier) {
|
|
452
|
+
// In the stored schema the field is explicitly forbidden.
|
|
453
|
+
// This has the same semantics of the field not being mentioned in the stored schema,
|
|
454
|
+
// and thus can be skipped.
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
457
|
+
|
|
529
458
|
// If the stored schema has a field that's not in the view schema
|
|
530
459
|
if (!viewKeys.has(fieldKey)) {
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
460
|
+
// When the application has opted into it, we allow viewing documents which have additional
|
|
461
|
+
// optional fields in the stored schema that are not present in the view schema.
|
|
462
|
+
if (!view.allowUnknownOptionalFields || schema.kind !== FieldKinds.optional.identifier) {
|
|
463
|
+
yield {
|
|
464
|
+
identifier,
|
|
465
|
+
fieldKey,
|
|
466
|
+
mismatch: "fieldKind",
|
|
467
|
+
view: storedEmptyFieldSchema.kind,
|
|
468
|
+
stored: schema.kind,
|
|
469
|
+
} satisfies FieldKindDiscrepancy;
|
|
536
470
|
}
|
|
537
|
-
yield {
|
|
538
|
-
identifier,
|
|
539
|
-
fieldKey,
|
|
540
|
-
mismatch: "fieldKind",
|
|
541
|
-
view: storedEmptyFieldSchema.kind,
|
|
542
|
-
stored: schema.kind,
|
|
543
|
-
} satisfies FieldKindDiscrepancy;
|
|
544
471
|
}
|
|
545
472
|
}
|
|
546
473
|
}
|
|
547
|
-
|
|
548
|
-
/**
|
|
549
|
-
* A linear extension of a partially-ordered set of `T`s. See:
|
|
550
|
-
* https://en.wikipedia.org/wiki/Linear_extension
|
|
551
|
-
*
|
|
552
|
-
* The linear extension is represented as a lookup from each poset element to its index in the linear extension.
|
|
553
|
-
*/
|
|
554
|
-
export type LinearExtension<T> = Map<T, number>;
|
|
555
|
-
|
|
556
|
-
/**
|
|
557
|
-
* A realizer for a partially-ordered set. See:
|
|
558
|
-
* https://en.wikipedia.org/wiki/Order_dimension
|
|
559
|
-
*/
|
|
560
|
-
export type Realizer<T> = LinearExtension<T>[];
|
|
561
|
-
|
|
562
|
-
/**
|
|
563
|
-
* @privateRemarks
|
|
564
|
-
* TODO: Knowledge of specific field kinds is not appropriate for modular schema.
|
|
565
|
-
* This bit of field comparison should be dependency injected by default-schema if this comparison logic remains in modular-schema
|
|
566
|
-
* (this is analogous to what is done in comparison.ts).
|
|
567
|
-
*/
|
|
568
|
-
const FieldKindIdentifiers = {
|
|
569
|
-
forbidden: brand<FieldKindIdentifier>("Forbidden"),
|
|
570
|
-
required: brand<FieldKindIdentifier>("Value"),
|
|
571
|
-
identifier: brand<FieldKindIdentifier>("Identifier"),
|
|
572
|
-
optional: brand<FieldKindIdentifier>("Optional"),
|
|
573
|
-
sequence: brand<FieldKindIdentifier>("Sequence"),
|
|
574
|
-
};
|
|
575
|
-
|
|
576
|
-
/**
|
|
577
|
-
* A realizer for the partial order of field kind relaxability.
|
|
578
|
-
*
|
|
579
|
-
* It seems extremely likely that this partial order will remain dimension 2 over time (i.e. the set of allowed relaxations can be visualized
|
|
580
|
-
* with a [dominance drawing](https://en.wikipedia.org/wiki/Dominance_drawing)), so this strategy allows efficient comarison between field kinds
|
|
581
|
-
* without excessive casework.
|
|
582
|
-
*
|
|
583
|
-
* Hasse diagram for the partial order is shown below (lower fields can be relaxed to higher fields):
|
|
584
|
-
* ```
|
|
585
|
-
* sequence
|
|
586
|
-
* |
|
|
587
|
-
* optional
|
|
588
|
-
* | \
|
|
589
|
-
* required forbidden
|
|
590
|
-
* |
|
|
591
|
-
* identifier
|
|
592
|
-
* ```
|
|
593
|
-
*/
|
|
594
|
-
export const fieldRealizer: Realizer<FieldKindIdentifier> = [
|
|
595
|
-
[
|
|
596
|
-
FieldKindIdentifiers.forbidden,
|
|
597
|
-
FieldKindIdentifiers.identifier,
|
|
598
|
-
FieldKindIdentifiers.required,
|
|
599
|
-
FieldKindIdentifiers.optional,
|
|
600
|
-
FieldKindIdentifiers.sequence,
|
|
601
|
-
],
|
|
602
|
-
[
|
|
603
|
-
FieldKindIdentifiers.identifier,
|
|
604
|
-
FieldKindIdentifiers.required,
|
|
605
|
-
FieldKindIdentifiers.forbidden,
|
|
606
|
-
FieldKindIdentifiers.optional,
|
|
607
|
-
FieldKindIdentifiers.sequence,
|
|
608
|
-
],
|
|
609
|
-
].map((extension) => new Map(extension.map((identifier, index) => [identifier, index])));
|
|
610
|
-
|
|
611
|
-
export const PosetComparisonResult = {
|
|
612
|
-
Less: "<",
|
|
613
|
-
Greater: ">",
|
|
614
|
-
Equal: "=",
|
|
615
|
-
Incomparable: "||",
|
|
616
|
-
} as const;
|
|
617
|
-
type PosetComparisonResult =
|
|
618
|
-
(typeof PosetComparisonResult)[keyof typeof PosetComparisonResult];
|
|
619
|
-
|
|
620
|
-
/**
|
|
621
|
-
* TODO: This is used by SchemaCompatibilityTester, revisit it during redesign and document
|
|
622
|
-
*/
|
|
623
|
-
export function comparePosetElements<T>(
|
|
624
|
-
a: T,
|
|
625
|
-
b: T,
|
|
626
|
-
realizer: Realizer<T>,
|
|
627
|
-
): PosetComparisonResult {
|
|
628
|
-
let hasLessThanResult = false;
|
|
629
|
-
let hasGreaterThanResult = false;
|
|
630
|
-
for (const extension of realizer) {
|
|
631
|
-
const aIndex = extension.get(a);
|
|
632
|
-
const bIndex = extension.get(b);
|
|
633
|
-
assert(aIndex !== undefined && bIndex !== undefined, 0xbf1 /* Invalid realizer */);
|
|
634
|
-
if (aIndex < bIndex) {
|
|
635
|
-
hasLessThanResult = true;
|
|
636
|
-
} else if (aIndex > bIndex) {
|
|
637
|
-
hasGreaterThanResult = true;
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
return hasLessThanResult
|
|
642
|
-
? hasGreaterThanResult
|
|
643
|
-
? PosetComparisonResult.Incomparable
|
|
644
|
-
: PosetComparisonResult.Less
|
|
645
|
-
: hasGreaterThanResult
|
|
646
|
-
? PosetComparisonResult.Greater
|
|
647
|
-
: PosetComparisonResult.Equal;
|
|
648
|
-
}
|