@fluidframework/tree 2.50.0 → 2.51.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/.eslintrc.cjs +3 -2
- package/.vscode/Tree.code-workspace +14 -1
- package/.vscode/settings.json +16 -0
- package/CHANGELOG.md +51 -2
- package/api-report/tree.alpha.api.md +7 -7
- package/dist/core/schema-stored/schema.d.ts +14 -1
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +3 -0
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +7 -2
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +4 -4
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +1 -0
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js +3 -1
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +5 -5
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +3 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +5 -3
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -4
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +2 -2
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +3 -8
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.js +0 -3
- package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +0 -1
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js +1 -8
- package/dist/feature-libraries/modular-schema/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/index.d.ts +0 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +1 -3
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +1 -1
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +7 -10
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +11 -13
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +60 -83
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeTypes.d.ts +1 -1
- package/dist/shared-tree/sharedTreeChangeTypes.js.map +1 -1
- package/dist/shared-tree/tree.d.ts.map +1 -1
- package/dist/shared-tree/tree.js +4 -3
- package/dist/shared-tree/tree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +7 -1
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +7 -2
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +4 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/conciseTree.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +1 -1
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +5 -5
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +3 -1
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +2 -0
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +1 -2
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/getJsonSchema.d.ts +1 -1
- package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/getSimpleSchema.d.ts +1 -1
- package/dist/simple-tree/api/getSimpleSchema.js.map +1 -1
- package/dist/simple-tree/api/identifierIndex.d.ts +1 -1
- package/dist/simple-tree/api/identifierIndex.js +2 -2
- package/dist/simple-tree/api/identifierIndex.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +4 -19
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +31 -82
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +14 -2
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +41 -4
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +36 -3
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +18 -18
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +16 -16
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +2 -2
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js +2 -2
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFromSimple.js +4 -4
- package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +2 -2
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.d.ts +2 -2
- package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.js +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +2 -2
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +2 -1
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts +4 -1
- package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts +1 -2
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +3 -3
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +2 -3
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts +2 -1
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +2 -2
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts +316 -0
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -0
- package/dist/simple-tree/core/allowedTypes.js +173 -0
- package/dist/simple-tree/core/allowedTypes.js.map +1 -0
- package/dist/simple-tree/core/context.d.ts +3 -9
- package/dist/simple-tree/core/context.d.ts.map +1 -1
- package/dist/simple-tree/core/context.js +3 -11
- package/dist/simple-tree/core/context.js.map +1 -1
- package/dist/simple-tree/core/flexList.d.ts.map +1 -0
- package/dist/simple-tree/core/flexList.js.map +1 -0
- package/dist/simple-tree/core/getOrCreateNode.d.ts +1 -1
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +9 -3
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +19 -3
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +8 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +24 -20
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +182 -39
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js +47 -17
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/{lib/simple-tree → dist/simple-tree/core}/treeNodeValid.d.ts +18 -4
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -0
- package/dist/simple-tree/{treeNodeValid.js → core/treeNodeValid.js} +41 -11
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -0
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +2 -1
- 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 +6 -2
- package/dist/simple-tree/createContext.d.ts.map +1 -1
- package/dist/simple-tree/createContext.js +15 -3
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/{feature-libraries/modular-schema → simple-tree}/discrepancies.d.ts +22 -29
- package/dist/simple-tree/discrepancies.d.ts.map +1 -0
- package/dist/simple-tree/discrepancies.js +382 -0
- package/dist/simple-tree/discrepancies.js.map +1 -0
- package/dist/simple-tree/fieldSchema.d.ts +423 -0
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -0
- package/dist/simple-tree/{schemaTypes.js → fieldSchema.js} +5 -195
- package/dist/simple-tree/fieldSchema.js.map +1 -0
- package/dist/simple-tree/index.d.ts +7 -6
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +17 -11
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +14 -5
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +117 -2
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +3 -4
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +97 -26
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +2 -2
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/common.d.ts +16 -0
- package/dist/simple-tree/node-kinds/common.d.ts.map +1 -0
- package/dist/simple-tree/node-kinds/common.js +42 -0
- package/dist/simple-tree/node-kinds/common.js.map +1 -0
- 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.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts +2 -3
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +64 -26
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts +2 -2
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +2 -2
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +19 -5
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +131 -27
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +11 -4
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts +2 -2
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +41 -13
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +2 -2
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +2 -2
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +3 -3
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/simpleSchema.d.ts +2 -2
- 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 +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +6 -7
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +5 -11
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +25 -395
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/simple-tree/unsafeUnknownSchema.d.ts +52 -0
- package/dist/simple-tree/unsafeUnknownSchema.d.ts.map +1 -0
- package/dist/simple-tree/unsafeUnknownSchema.js +13 -0
- package/dist/simple-tree/unsafeUnknownSchema.js.map +1 -0
- package/dist/simple-tree/walkFieldSchema.d.ts +1 -1
- package/dist/simple-tree/walkFieldSchema.js +2 -2
- package/dist/simple-tree/walkFieldSchema.js.map +1 -1
- package/dist/tableSchema.d.ts +12 -12
- package/dist/treeFactory.d.ts +0 -1
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +0 -1
- package/dist/treeFactory.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +14 -1
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +3 -0
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +7 -2
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +4 -4
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +1 -0
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js +1 -0
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +6 -6
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +3 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +3 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -2
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +2 -2
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +2 -2
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.js +0 -3
- package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +0 -1
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js +0 -1
- package/lib/feature-libraries/modular-schema/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/index.d.ts +0 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +0 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +1 -1
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +5 -8
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +11 -13
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +61 -83
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeTypes.d.ts +1 -1
- package/lib/shared-tree/sharedTreeChangeTypes.js.map +1 -1
- package/lib/shared-tree/tree.d.ts.map +1 -1
- package/lib/shared-tree/tree.js +4 -3
- package/lib/shared-tree/tree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +7 -1
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +7 -2
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +5 -2
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/conciseTree.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +1 -1
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +2 -2
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +3 -1
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +2 -0
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +1 -2
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/getJsonSchema.d.ts +1 -1
- package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/getSimpleSchema.d.ts +1 -1
- package/lib/simple-tree/api/getSimpleSchema.js.map +1 -1
- package/lib/simple-tree/api/identifierIndex.d.ts +1 -1
- package/lib/simple-tree/api/identifierIndex.js +1 -1
- package/lib/simple-tree/api/identifierIndex.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +4 -19
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js +25 -76
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts +14 -2
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +40 -4
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +36 -3
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +2 -2
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +16 -16
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +2 -2
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFromSimple.js +1 -1
- package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.d.ts +2 -2
- package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.js +2 -2
- package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +2 -2
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +2 -1
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts +4 -1
- package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts +1 -2
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +2 -2
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +2 -3
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts +2 -1
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts +316 -0
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -0
- package/lib/simple-tree/core/allowedTypes.js +162 -0
- package/lib/simple-tree/core/allowedTypes.js.map +1 -0
- package/lib/simple-tree/core/context.d.ts +3 -9
- package/lib/simple-tree/core/context.d.ts.map +1 -1
- package/lib/simple-tree/core/context.js +0 -8
- package/lib/simple-tree/core/context.js.map +1 -1
- package/lib/simple-tree/core/flexList.d.ts.map +1 -0
- package/lib/simple-tree/core/flexList.js.map +1 -0
- package/lib/simple-tree/core/getOrCreateNode.d.ts +1 -1
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +9 -3
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +6 -3
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +8 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +10 -6
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +182 -39
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js +44 -14
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/{dist/simple-tree → lib/simple-tree/core}/treeNodeValid.d.ts +18 -4
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -0
- package/lib/simple-tree/{treeNodeValid.js → core/treeNodeValid.js} +31 -3
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -0
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +2 -1
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +7 -3
- package/lib/simple-tree/core/walkSchema.js.map +1 -1
- package/lib/simple-tree/createContext.d.ts +6 -2
- package/lib/simple-tree/createContext.d.ts.map +1 -1
- package/lib/simple-tree/createContext.js +13 -2
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/{feature-libraries/modular-schema → simple-tree}/discrepancies.d.ts +22 -29
- package/lib/simple-tree/discrepancies.d.ts.map +1 -0
- package/lib/simple-tree/discrepancies.js +376 -0
- package/lib/simple-tree/discrepancies.js.map +1 -0
- package/lib/simple-tree/fieldSchema.d.ts +423 -0
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -0
- package/lib/simple-tree/{schemaTypes.js → fieldSchema.js} +3 -183
- package/lib/simple-tree/fieldSchema.js.map +1 -0
- package/lib/simple-tree/index.d.ts +7 -6
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +4 -3
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +14 -5
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +117 -3
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +3 -4
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +86 -15
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +2 -2
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/common.d.ts +16 -0
- package/lib/simple-tree/node-kinds/common.d.ts.map +1 -0
- package/lib/simple-tree/node-kinds/common.js +38 -0
- package/lib/simple-tree/node-kinds/common.js.map +1 -0
- 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.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts +2 -3
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +51 -13
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts +2 -2
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.js +1 -1
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +2 -2
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +19 -5
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +116 -14
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +11 -4
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.js +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts +2 -2
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +40 -12
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +2 -2
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.js +1 -1
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +2 -2
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +2 -2
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/simpleSchema.d.ts +2 -2
- 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 +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +2 -3
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +5 -11
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +10 -381
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/simple-tree/unsafeUnknownSchema.d.ts +52 -0
- package/lib/simple-tree/unsafeUnknownSchema.d.ts.map +1 -0
- package/lib/simple-tree/unsafeUnknownSchema.js +10 -0
- package/lib/simple-tree/unsafeUnknownSchema.js.map +1 -0
- package/lib/simple-tree/walkFieldSchema.d.ts +1 -1
- package/lib/simple-tree/walkFieldSchema.js +1 -1
- package/lib/simple-tree/walkFieldSchema.js.map +1 -1
- package/lib/tableSchema.d.ts +12 -12
- package/lib/treeFactory.d.ts +0 -1
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +0 -1
- package/lib/treeFactory.js.map +1 -1
- package/package.json +22 -23
- package/src/core/schema-stored/schema.ts +14 -1
- package/src/feature-libraries/default-schema/schemaChecker.ts +3 -0
- package/src/feature-libraries/flex-tree/context.ts +10 -5
- package/src/feature-libraries/flex-tree/index.ts +2 -0
- package/src/feature-libraries/flex-tree/lazyField.ts +10 -6
- package/src/feature-libraries/flex-tree/lazyNode.ts +6 -1
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -2
- package/src/feature-libraries/index.ts +1 -15
- package/src/feature-libraries/modular-schema/comparison.ts +0 -4
- package/src/feature-libraries/modular-schema/index.ts +0 -17
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/index.ts +0 -2
- package/src/shared-tree/schematizeTree.ts +5 -9
- package/src/shared-tree/schematizingTreeView.ts +75 -113
- package/src/shared-tree/sharedTreeChangeTypes.ts +1 -1
- package/src/shared-tree/tree.ts +4 -3
- package/src/shared-tree/treeAlpha.ts +7 -1
- package/src/shared-tree/treeCheckout.ts +15 -2
- package/src/simple-tree/api/conciseTree.ts +1 -2
- package/src/simple-tree/api/configuration.ts +7 -4
- package/src/simple-tree/api/create.ts +3 -1
- package/src/simple-tree/api/customTree.ts +1 -2
- package/src/simple-tree/api/getJsonSchema.ts +1 -1
- package/src/simple-tree/api/getSimpleSchema.ts +1 -1
- package/src/simple-tree/api/identifierIndex.ts +1 -1
- package/src/simple-tree/api/index.ts +2 -0
- package/src/simple-tree/api/schemaCompatibilityTester.ts +38 -128
- package/src/simple-tree/api/schemaCreationUtilities.ts +50 -5
- package/src/simple-tree/api/schemaFactory.ts +45 -10
- package/src/simple-tree/api/schemaFactoryAlpha.ts +4 -7
- package/src/simple-tree/api/schemaFactoryRecursive.ts +9 -4
- package/src/simple-tree/api/schemaFromSimple.ts +2 -3
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +1 -1
- package/src/simple-tree/api/simpleTreeIndex.ts +8 -3
- package/src/simple-tree/api/storedSchema.ts +1 -2
- package/src/simple-tree/api/tree.ts +2 -2
- package/src/simple-tree/api/treeBeta.ts +4 -1
- package/src/simple-tree/api/treeNodeApi.ts +5 -8
- package/src/simple-tree/api/typesUnsafe.ts +5 -4
- package/src/simple-tree/api/verboseTree.ts +3 -6
- package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +1 -1
- package/src/simple-tree/core/README.md +1 -1
- package/src/simple-tree/core/allowedTypes.ts +496 -0
- package/src/simple-tree/core/context.ts +3 -10
- package/src/simple-tree/core/getOrCreateNode.ts +1 -1
- package/src/simple-tree/core/index.ts +62 -9
- package/src/simple-tree/core/treeNodeKernel.ts +12 -6
- package/src/simple-tree/core/treeNodeSchema.ts +247 -63
- package/src/simple-tree/{treeNodeValid.ts → core/treeNodeValid.ts} +59 -15
- package/src/simple-tree/core/unhydratedFlexTree.ts +1 -1
- package/src/simple-tree/core/walkSchema.ts +9 -5
- package/src/simple-tree/createContext.ts +26 -2
- package/src/simple-tree/discrepancies.ts +648 -0
- package/src/simple-tree/fieldSchema.ts +734 -0
- package/src/simple-tree/index.ts +41 -31
- package/src/simple-tree/leafNodeSchema.ts +137 -5
- package/src/simple-tree/node-kinds/array/arrayNode.ts +141 -30
- package/src/simple-tree/node-kinds/array/arrayNodeTypes.ts +5 -7
- package/src/simple-tree/node-kinds/common.ts +60 -0
- package/src/simple-tree/node-kinds/index.ts +2 -0
- package/src/simple-tree/node-kinds/map/mapNode.ts +91 -33
- package/src/simple-tree/node-kinds/map/mapNodeTypes.ts +5 -7
- package/src/simple-tree/node-kinds/object/index.ts +2 -0
- package/src/simple-tree/node-kinds/object/objectNode.ts +205 -25
- package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +22 -5
- package/src/simple-tree/node-kinds/record/recordNode.ts +68 -26
- package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +6 -8
- package/src/simple-tree/prepareForInsertion.ts +7 -6
- package/src/simple-tree/simpleSchema.ts +2 -2
- package/src/simple-tree/toStoredSchema.ts +2 -3
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +12 -494
- package/src/simple-tree/unsafeUnknownSchema.ts +70 -0
- package/src/simple-tree/walkFieldSchema.ts +1 -1
- package/src/treeFactory.ts +0 -1
- package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +0 -1
- package/dist/feature-libraries/modular-schema/discrepancies.js +0 -361
- package/dist/feature-libraries/modular-schema/discrepancies.js.map +0 -1
- package/dist/shared-tree/checkoutFlexTreeView.d.ts +0 -58
- package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +0 -1
- package/dist/shared-tree/checkoutFlexTreeView.js +0 -77
- package/dist/shared-tree/checkoutFlexTreeView.js.map +0 -1
- package/dist/simple-tree/flexList.d.ts.map +0 -1
- package/dist/simple-tree/flexList.js.map +0 -1
- package/dist/simple-tree/schemaTypes.d.ts +0 -856
- package/dist/simple-tree/schemaTypes.d.ts.map +0 -1
- package/dist/simple-tree/schemaTypes.js.map +0 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +0 -1
- package/dist/simple-tree/treeNodeValid.js.map +0 -1
- package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +0 -1
- package/lib/feature-libraries/modular-schema/discrepancies.js +0 -354
- package/lib/feature-libraries/modular-schema/discrepancies.js.map +0 -1
- package/lib/shared-tree/checkoutFlexTreeView.d.ts +0 -58
- package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +0 -1
- package/lib/shared-tree/checkoutFlexTreeView.js +0 -72
- package/lib/shared-tree/checkoutFlexTreeView.js.map +0 -1
- package/lib/simple-tree/flexList.d.ts.map +0 -1
- package/lib/simple-tree/flexList.js.map +0 -1
- package/lib/simple-tree/schemaTypes.d.ts +0 -856
- package/lib/simple-tree/schemaTypes.d.ts.map +0 -1
- package/lib/simple-tree/schemaTypes.js.map +0 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +0 -1
- package/lib/simple-tree/treeNodeValid.js.map +0 -1
- package/src/feature-libraries/modular-schema/discrepancies.ts +0 -567
- package/src/shared-tree/checkoutFlexTreeView.ts +0 -100
- package/src/simple-tree/schemaTypes.ts +0 -1420
- /package/dist/simple-tree/{flexList.d.ts → core/flexList.d.ts} +0 -0
- /package/dist/simple-tree/{flexList.js → core/flexList.js} +0 -0
- /package/lib/simple-tree/{flexList.d.ts → core/flexList.d.ts} +0 -0
- /package/lib/simple-tree/{flexList.js → core/flexList.js} +0 -0
- /package/src/simple-tree/{flexList.ts → core/flexList.ts} +0 -0
|
@@ -4,75 +4,23 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
7
|
-
import { assert, fail, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
8
7
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
9
|
-
import {
|
|
8
|
+
import { assert } from "@fluidframework/core-utils/internal";
|
|
10
9
|
|
|
11
|
-
import {
|
|
12
|
-
EmptyKey,
|
|
13
|
-
type FieldKey,
|
|
14
|
-
type NodeData,
|
|
15
|
-
type TreeValue,
|
|
16
|
-
type ValueSchema,
|
|
17
|
-
} from "../core/index.js";
|
|
18
|
-
import { FieldKinds, isTreeValue, valueSchemaAllows } from "../feature-libraries/index.js";
|
|
19
|
-
import { brand, isReadonlyArray, hasSingle } from "../util/index.js";
|
|
10
|
+
import { hasSingle } from "../util/index.js";
|
|
20
11
|
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
type ImplicitAllowedTypes,
|
|
24
|
-
normalizeAllowedTypes,
|
|
25
|
-
isConstant,
|
|
26
|
-
type ImplicitFieldSchema,
|
|
27
|
-
normalizeFieldSchema,
|
|
28
|
-
FieldKind,
|
|
29
|
-
type TreeLeafValue,
|
|
30
|
-
extractFieldProvider,
|
|
31
|
-
type ContextualFieldProvider,
|
|
32
|
-
unannotateImplicitAllowedTypes,
|
|
33
|
-
} from "./schemaTypes.js";
|
|
12
|
+
import { type ImplicitFieldSchema, normalizeFieldSchema, FieldKind } from "./fieldSchema.js";
|
|
34
13
|
import {
|
|
35
|
-
|
|
14
|
+
CompatibilityLevel,
|
|
36
15
|
getKernel,
|
|
16
|
+
getTreeNodeSchemaPrivateData,
|
|
37
17
|
isTreeNode,
|
|
38
|
-
NodeKind,
|
|
39
18
|
type TreeNode,
|
|
40
19
|
type TreeNodeSchema,
|
|
41
20
|
type Unhydrated,
|
|
42
|
-
type UnhydratedFlexTreeField,
|
|
43
21
|
UnhydratedFlexTreeNode,
|
|
44
|
-
UnhydratedSequenceField,
|
|
45
22
|
} from "./core/index.js";
|
|
46
23
|
import { getUnhydratedContext } from "./createContext.js";
|
|
47
|
-
import { convertFieldKind } from "./toStoredSchema.js";
|
|
48
|
-
|
|
49
|
-
// Required to prevent the introduction of new circular dependencies
|
|
50
|
-
// TODO: Having the schema provide their own policy functions for compatibility which
|
|
51
|
-
// `unhydratedFlexTreeFromInsertable` invokes instead of manually handling each kind would remove this bad
|
|
52
|
-
// dependency, and reduce coupling.
|
|
53
|
-
/* eslint-disable import/no-internal-modules */
|
|
54
|
-
import { isArrayNodeSchema, type ArrayNodeSchema } from "./node-kinds/array/arrayNodeTypes.js";
|
|
55
|
-
import { isMapNodeSchema, type MapNodeSchema } from "./node-kinds/map/mapNodeTypes.js";
|
|
56
|
-
import {
|
|
57
|
-
isObjectNodeSchema,
|
|
58
|
-
type ObjectNodeSchemaPrivate,
|
|
59
|
-
} from "./node-kinds/object/objectNodeTypes.js";
|
|
60
|
-
import {
|
|
61
|
-
isRecordNodeSchema,
|
|
62
|
-
type RecordNodeSchema,
|
|
63
|
-
} from "./node-kinds/record/recordNodeTypes.js";
|
|
64
|
-
/* eslint-enable import/no-internal-modules */
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Module notes:
|
|
68
|
-
*
|
|
69
|
-
* The flow of the below code is in terms of the structure of the input data. We then verify that the associated
|
|
70
|
-
* schema is appropriate for that kind of data. This is fine while we have a 1:1 mapping of kind of input data to
|
|
71
|
-
* the kind of schema we expect for it (e.g. an input that is an array always need to be associated with a sequence in
|
|
72
|
-
* the schema). If/when we begin accepting kinds of input data that are ambiguous (e.g. accepting an input that is an
|
|
73
|
-
* array of key/value tuples to instantiate a map) we may need to rethink the structure here to be based more on the
|
|
74
|
-
* schema than on the input data.
|
|
75
|
-
*/
|
|
76
24
|
|
|
77
25
|
/**
|
|
78
26
|
* Transforms an input {@link TypedNode} tree to an {@link UnhydratedFlexTreeNode}.
|
|
@@ -125,7 +73,7 @@ export function unhydratedFlexTreeFromInsertable<TIn extends InsertableContent |
|
|
|
125
73
|
/**
|
|
126
74
|
* Copy content from `data` into a UnhydratedFlexTreeNode.
|
|
127
75
|
*/
|
|
128
|
-
function unhydratedFlexTreeFromInsertableNode(
|
|
76
|
+
export function unhydratedFlexTreeFromInsertableNode(
|
|
129
77
|
data: InsertableContent,
|
|
130
78
|
allowedTypes: ReadonlySet<TreeNodeSchema>,
|
|
131
79
|
): UnhydratedFlexTreeNode {
|
|
@@ -144,322 +92,12 @@ function unhydratedFlexTreeFromInsertableNode(
|
|
|
144
92
|
}
|
|
145
93
|
|
|
146
94
|
const schema = getType(data, allowedTypes);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
switch (schema.kind) {
|
|
150
|
-
case NodeKind.Leaf:
|
|
151
|
-
result = leafToFlexContent(data, schema, allowedTypes);
|
|
152
|
-
break;
|
|
153
|
-
case NodeKind.Array:
|
|
154
|
-
assert(isArrayNodeSchema(schema), 0x922 /* Expected an array schema. */);
|
|
155
|
-
result = arrayToFlexContent(data, schema);
|
|
156
|
-
break;
|
|
157
|
-
case NodeKind.Map:
|
|
158
|
-
assert(isMapNodeSchema(schema), 0x923 /* Expected a Map schema. */);
|
|
159
|
-
result = mapToFlexContent(data, schema);
|
|
160
|
-
break;
|
|
161
|
-
case NodeKind.Object:
|
|
162
|
-
assert(isObjectNodeSchema(schema), 0x924 /* Expected an Object schema. */);
|
|
163
|
-
result = objectToFlexContent(data, schema);
|
|
164
|
-
break;
|
|
165
|
-
case NodeKind.Record:
|
|
166
|
-
assert(isRecordNodeSchema(schema), 0xbdd /* Expected a Record schema. */);
|
|
167
|
-
result = recordToFlexContent(data, schema);
|
|
168
|
-
break;
|
|
169
|
-
default:
|
|
170
|
-
unreachableCase(schema.kind);
|
|
171
|
-
}
|
|
95
|
+
const handler = getTreeNodeSchemaPrivateData(schema).idempotentInitialize();
|
|
96
|
+
const result = handler.toFlexContent(data, allowedTypes);
|
|
172
97
|
|
|
173
98
|
return new UnhydratedFlexTreeNode(...result, getUnhydratedContext(schema));
|
|
174
99
|
}
|
|
175
100
|
|
|
176
|
-
type FlexContent = [NodeData, Map<FieldKey, UnhydratedFlexTreeField>];
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Transforms data under a Leaf schema.
|
|
180
|
-
* @param data - The tree data to be transformed. Must be a {@link TreeValue}.
|
|
181
|
-
* @param schema - The schema associated with the value.
|
|
182
|
-
* @param allowedTypes - The allowed types specified by the parent.
|
|
183
|
-
* Used to determine which fallback values may be appropriate.
|
|
184
|
-
*/
|
|
185
|
-
function leafToFlexContent(
|
|
186
|
-
data: FactoryContent,
|
|
187
|
-
schema: TreeNodeSchema,
|
|
188
|
-
allowedTypes: ReadonlySet<TreeNodeSchema>,
|
|
189
|
-
): FlexContent {
|
|
190
|
-
assert(schema.kind === NodeKind.Leaf, 0x921 /* Expected a leaf schema. */);
|
|
191
|
-
if (!isTreeValue(data)) {
|
|
192
|
-
// This rule exists to protect against useless `toString` output like `[object Object]`.
|
|
193
|
-
// In this case, that's actually reasonable behavior, since object input is not compatible with Leaf schemas.
|
|
194
|
-
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
195
|
-
throw new UsageError(`Input data is incompatible with leaf schema: ${data}`);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
const mappedValue = mapValueWithFallbacks(data, allowedTypes);
|
|
199
|
-
const mappedSchema = getType(mappedValue, allowedTypes);
|
|
200
|
-
|
|
201
|
-
assert(
|
|
202
|
-
allowsValue(mappedSchema, mappedValue),
|
|
203
|
-
0x84a /* Unsupported schema for provided primitive. */,
|
|
204
|
-
);
|
|
205
|
-
|
|
206
|
-
return [
|
|
207
|
-
{
|
|
208
|
-
value: mappedValue,
|
|
209
|
-
type: brand(mappedSchema.identifier),
|
|
210
|
-
},
|
|
211
|
-
new Map<FieldKey, UnhydratedFlexTreeField>(),
|
|
212
|
-
];
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Checks an incoming {@link TreeLeafValue} to ensure it is compatible with its requirements.
|
|
217
|
-
* For unsupported values with a schema-compatible replacement, return the replacement value.
|
|
218
|
-
* For unsupported values without a schema-compatible replacement, throw.
|
|
219
|
-
* For supported values, return the input.
|
|
220
|
-
*/
|
|
221
|
-
function mapValueWithFallbacks(
|
|
222
|
-
value: TreeLeafValue,
|
|
223
|
-
allowedTypes: ReadonlySet<TreeNodeSchema>,
|
|
224
|
-
): TreeValue {
|
|
225
|
-
switch (typeof value) {
|
|
226
|
-
case "number": {
|
|
227
|
-
if (Object.is(value, -0)) {
|
|
228
|
-
// Our serialized data format does not support -0.
|
|
229
|
-
// Map such input to +0.
|
|
230
|
-
return 0;
|
|
231
|
-
} else if (!Number.isFinite(value)) {
|
|
232
|
-
// Our serialized data format does not support NaN nor +/-∞.
|
|
233
|
-
// If the schema supports `null`, fall back to that. Otherwise, throw.
|
|
234
|
-
// This is intended to match JSON's behavior for such values.
|
|
235
|
-
if (allowedTypes.has(nullSchema)) {
|
|
236
|
-
return null;
|
|
237
|
-
} else {
|
|
238
|
-
throw new UsageError(`Received unsupported numeric value: ${value}.`);
|
|
239
|
-
}
|
|
240
|
-
} else {
|
|
241
|
-
return value;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
case "string":
|
|
245
|
-
// TODO:
|
|
246
|
-
// This should detect invalid strings. Something like @stdlib/regexp-utf16-unpaired-surrogate could be used to do this.
|
|
247
|
-
// See SchemaFactory.string for details.
|
|
248
|
-
case "boolean":
|
|
249
|
-
return value;
|
|
250
|
-
case "object": {
|
|
251
|
-
if (value === null || isFluidHandle(value)) {
|
|
252
|
-
return value;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
default:
|
|
256
|
-
throw new UsageError(`Received unsupported leaf value: ${value}.`);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Transforms data under an Array schema.
|
|
262
|
-
* @param data - The tree data to be transformed.
|
|
263
|
-
* @param allowedTypes - The set of types allowed by the parent context. Used to validate the input tree.
|
|
264
|
-
*/
|
|
265
|
-
function arrayChildToFlexTree(
|
|
266
|
-
child: InsertableContent,
|
|
267
|
-
allowedTypes: ReadonlySet<TreeNodeSchema>,
|
|
268
|
-
): UnhydratedFlexTreeNode {
|
|
269
|
-
// We do not support undefined sequence entries.
|
|
270
|
-
// If we encounter an undefined entry, use null instead if supported by the schema, otherwise throw.
|
|
271
|
-
let childWithFallback = child;
|
|
272
|
-
if (child === undefined) {
|
|
273
|
-
if (allowedTypes.has(nullSchema)) {
|
|
274
|
-
childWithFallback = null;
|
|
275
|
-
} else {
|
|
276
|
-
throw new TypeError(`Received unsupported array entry value: ${child}.`);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
return unhydratedFlexTreeFromInsertableNode(childWithFallback, allowedTypes);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Transforms data under an Array schema.
|
|
284
|
-
* @param data - The tree data to be transformed. Must be an iterable.
|
|
285
|
-
* @param schema - The schema associated with the value.
|
|
286
|
-
*/
|
|
287
|
-
function arrayToFlexContent(data: FactoryContent, schema: ArrayNodeSchema): FlexContent {
|
|
288
|
-
if (!(typeof data === "object" && data !== null && Symbol.iterator in data)) {
|
|
289
|
-
throw new UsageError(`Input data is incompatible with Array schema: ${data}`);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
const allowedChildTypes = normalizeAllowedTypes(schema.info as ImplicitAllowedTypes);
|
|
293
|
-
|
|
294
|
-
const mappedData = Array.from(data, (child) =>
|
|
295
|
-
arrayChildToFlexTree(child, allowedChildTypes),
|
|
296
|
-
);
|
|
297
|
-
|
|
298
|
-
const context = getUnhydratedContext(schema).flexContext;
|
|
299
|
-
|
|
300
|
-
// Array nodes have a single `EmptyKey` field:
|
|
301
|
-
const fieldsEntries =
|
|
302
|
-
mappedData.length === 0
|
|
303
|
-
? []
|
|
304
|
-
: ([
|
|
305
|
-
[
|
|
306
|
-
EmptyKey,
|
|
307
|
-
new UnhydratedSequenceField(
|
|
308
|
-
context,
|
|
309
|
-
FieldKinds.sequence.identifier,
|
|
310
|
-
EmptyKey,
|
|
311
|
-
mappedData,
|
|
312
|
-
),
|
|
313
|
-
],
|
|
314
|
-
] as const);
|
|
315
|
-
|
|
316
|
-
return [
|
|
317
|
-
{
|
|
318
|
-
type: brand(schema.identifier),
|
|
319
|
-
},
|
|
320
|
-
new Map(fieldsEntries),
|
|
321
|
-
];
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
/**
|
|
325
|
-
* Transforms data under a Map schema.
|
|
326
|
-
* @param data - The tree data to be transformed. Must be an iterable.
|
|
327
|
-
* @param schema - The schema associated with the value.
|
|
328
|
-
*/
|
|
329
|
-
function mapToFlexContent(data: FactoryContent, schema: MapNodeSchema): FlexContent {
|
|
330
|
-
if (!(typeof data === "object" && data !== null)) {
|
|
331
|
-
throw new UsageError(`Input data is incompatible with Map schema: ${data}`);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
const fieldsIterator = (
|
|
335
|
-
Symbol.iterator in data
|
|
336
|
-
? // Support iterables of key value pairs (including Map objects)
|
|
337
|
-
data
|
|
338
|
-
: // Support record objects for JSON style Map data
|
|
339
|
-
Object.entries(data)
|
|
340
|
-
) as Iterable<readonly [string, InsertableContent]>;
|
|
341
|
-
|
|
342
|
-
return recordLikeDataToFlexContent(fieldsIterator, schema);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
/**
|
|
346
|
-
* Transforms data under an Object schema.
|
|
347
|
-
* @param data - The tree data to be transformed. Must be a Record-like object.
|
|
348
|
-
* @param schema - The schema associated with the value.
|
|
349
|
-
*/
|
|
350
|
-
function objectToFlexContent(
|
|
351
|
-
data: FactoryContent,
|
|
352
|
-
schema: ObjectNodeSchemaPrivate,
|
|
353
|
-
): FlexContent {
|
|
354
|
-
if (
|
|
355
|
-
typeof data !== "object" ||
|
|
356
|
-
data === null ||
|
|
357
|
-
Symbol.iterator in data ||
|
|
358
|
-
isFluidHandle(data)
|
|
359
|
-
) {
|
|
360
|
-
throw new UsageError(`Input data is incompatible with Object schema: ${data}`);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
const fields = new Map<FieldKey, UnhydratedFlexTreeField>();
|
|
364
|
-
const context = getUnhydratedContext(schema).flexContext;
|
|
365
|
-
|
|
366
|
-
for (const [key, fieldInfo] of schema.flexKeyMap) {
|
|
367
|
-
const value = getFieldProperty(data, key);
|
|
368
|
-
|
|
369
|
-
let children: UnhydratedFlexTreeNode[] | ContextualFieldProvider;
|
|
370
|
-
if (value === undefined) {
|
|
371
|
-
const defaultProvider =
|
|
372
|
-
fieldInfo.schema.props?.defaultProvider ??
|
|
373
|
-
fail(0xbb1 /* missing field has no default provider */);
|
|
374
|
-
const fieldProvider = extractFieldProvider(defaultProvider);
|
|
375
|
-
children = isConstant(fieldProvider) ? fieldProvider() : fieldProvider;
|
|
376
|
-
} else {
|
|
377
|
-
children = [
|
|
378
|
-
unhydratedFlexTreeFromInsertableNode(value, fieldInfo.schema.allowedTypeSet),
|
|
379
|
-
];
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
const kind =
|
|
383
|
-
convertFieldKind.get(fieldInfo.schema.kind) ?? fail(0xbb2 /* Invalid field kind */);
|
|
384
|
-
fields.set(
|
|
385
|
-
fieldInfo.storedKey,
|
|
386
|
-
createField(context, kind.identifier, fieldInfo.storedKey, children),
|
|
387
|
-
);
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
return [{ type: brand(schema.identifier) }, fields];
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Transforms data under an Object schema.
|
|
395
|
-
* @param data - The tree data to be transformed. Must be a Record-like object.
|
|
396
|
-
* @param schema - The schema associated with the value.
|
|
397
|
-
*/
|
|
398
|
-
function recordToFlexContent(data: FactoryContent, schema: RecordNodeSchema): FlexContent {
|
|
399
|
-
if (!(typeof data === "object" && data !== null)) {
|
|
400
|
-
throw new UsageError(`Input data is incompatible with Record schema: ${data}`);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
const fieldsIterator: Iterable<readonly [string, InsertableContent]> = Object.entries(data);
|
|
404
|
-
return recordLikeDataToFlexContent(fieldsIterator, schema);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Converts record-like data to a FlexContent representation for map/record schema.
|
|
409
|
-
*/
|
|
410
|
-
function recordLikeDataToFlexContent(
|
|
411
|
-
fieldsIterator: Iterable<readonly [string, InsertableContent]>,
|
|
412
|
-
schema: MapNodeSchema | RecordNodeSchema,
|
|
413
|
-
): FlexContent {
|
|
414
|
-
const allowedChildTypes = normalizeAllowedTypes(unannotateImplicitAllowedTypes(schema.info));
|
|
415
|
-
const context = getUnhydratedContext(schema).flexContext;
|
|
416
|
-
|
|
417
|
-
const transformedFields = new Map<FieldKey, UnhydratedFlexTreeField>();
|
|
418
|
-
for (const item of fieldsIterator) {
|
|
419
|
-
const [key, value] = item;
|
|
420
|
-
assert(!transformedFields.has(brand(key)), 0x84c /* Keys should not be duplicated */);
|
|
421
|
-
|
|
422
|
-
// Omit undefined values - an entry with an undefined value is equivalent to one that has been removed or omitted
|
|
423
|
-
if (value !== undefined) {
|
|
424
|
-
const child = unhydratedFlexTreeFromInsertableNode(value, allowedChildTypes);
|
|
425
|
-
const field = createField(context, FieldKinds.optional.identifier, brand(key), [child]);
|
|
426
|
-
transformedFields.set(brand(key), field);
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
return [
|
|
431
|
-
{
|
|
432
|
-
type: brand(schema.identifier),
|
|
433
|
-
},
|
|
434
|
-
transformedFields,
|
|
435
|
-
];
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
/**
|
|
439
|
-
* Check {@link FactoryContentObject} for a property which could be store a field.
|
|
440
|
-
*
|
|
441
|
-
* @returns If the property exists, return its value. Otherwise, returns undefined.
|
|
442
|
-
* @remarks
|
|
443
|
-
* The currently policy is to only consider own properties.
|
|
444
|
-
* See {@link InsertableObjectFromSchemaRecord} for where this policy is documented in the public API.
|
|
445
|
-
*
|
|
446
|
-
* Explicit undefined values are treated the same as missing properties to allow explicit use of undefined with defaulted identifiers.
|
|
447
|
-
*
|
|
448
|
-
* @privateRemarks
|
|
449
|
-
* If we ever want to have an optional field which defaults to something other than undefined, this will need changes.
|
|
450
|
-
* It would need to adjusting the handling of explicit undefined in contexts where undefined is allowed, and a default provider also exists.
|
|
451
|
-
*/
|
|
452
|
-
function getFieldProperty(
|
|
453
|
-
data: FactoryContentObject,
|
|
454
|
-
key: string | symbol,
|
|
455
|
-
): InsertableContent | undefined {
|
|
456
|
-
// This policy only allows own properties.
|
|
457
|
-
if (Object.hasOwnProperty.call(data, key)) {
|
|
458
|
-
return (data as Record<string, InsertableContent>)[key as string];
|
|
459
|
-
}
|
|
460
|
-
return undefined;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
101
|
function getType(
|
|
464
102
|
data: FactoryContent,
|
|
465
103
|
allowedTypes: ReadonlySet<TreeNodeSchema>,
|
|
@@ -492,10 +130,13 @@ export function getPossibleTypes(
|
|
|
492
130
|
allowedTypes: ReadonlySet<TreeNodeSchema>,
|
|
493
131
|
data: FactoryContent,
|
|
494
132
|
): TreeNodeSchema[] {
|
|
133
|
+
assert(data !== undefined, 0x889 /* undefined cannot be used as FactoryContent. */);
|
|
134
|
+
|
|
495
135
|
let best = CompatibilityLevel.None;
|
|
496
136
|
const possibleTypes: TreeNodeSchema[] = [];
|
|
497
137
|
for (const schema of allowedTypes) {
|
|
498
|
-
const
|
|
138
|
+
const handler = getTreeNodeSchemaPrivateData(schema).idempotentInitialize();
|
|
139
|
+
const level = handler.shallowCompatibilityTest(data);
|
|
499
140
|
if (level > best) {
|
|
500
141
|
possibleTypes.length = 0;
|
|
501
142
|
best = level;
|
|
@@ -507,129 +148,6 @@ export function getPossibleTypes(
|
|
|
507
148
|
return best === CompatibilityLevel.None ? [] : possibleTypes;
|
|
508
149
|
}
|
|
509
150
|
|
|
510
|
-
/**
|
|
511
|
-
* Indicates a compatibility level for inferring a schema to apply to insertable data.
|
|
512
|
-
* @remarks
|
|
513
|
-
* Only the highest compatibility options are used.
|
|
514
|
-
* This approach allows adding new possible matching at a new lower compatibility level as a non breaking change,
|
|
515
|
-
* since that way they can't make a case that was compatible before ambiguous now.
|
|
516
|
-
*/
|
|
517
|
-
enum CompatibilityLevel {
|
|
518
|
-
/**
|
|
519
|
-
* Not compatible. Constructor typing indicates incompatibility.
|
|
520
|
-
*/
|
|
521
|
-
None = 0,
|
|
522
|
-
/**
|
|
523
|
-
* Additional compatibility cases added in Fluid Framework 2.2.
|
|
524
|
-
*/
|
|
525
|
-
Low = 1,
|
|
526
|
-
/**
|
|
527
|
-
* Compatible in Fluid Framework 2.0.
|
|
528
|
-
*/
|
|
529
|
-
Normal = 2,
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
/**
|
|
533
|
-
* Checks if data might be schema-compatible.
|
|
534
|
-
*
|
|
535
|
-
* @returns false if `data` is incompatible with `type` based on a cheap/shallow check.
|
|
536
|
-
*
|
|
537
|
-
* Note that this may return true for cases where data is incompatible, but it must not return false in cases where the data is compatible.
|
|
538
|
-
*/
|
|
539
|
-
function shallowCompatibilityTest(
|
|
540
|
-
schema: TreeNodeSchema,
|
|
541
|
-
data: FactoryContent,
|
|
542
|
-
): CompatibilityLevel {
|
|
543
|
-
assert(data !== undefined, 0x889 /* undefined cannot be used as FactoryContent. */);
|
|
544
|
-
|
|
545
|
-
if (isTreeValue(data)) {
|
|
546
|
-
return allowsValue(schema, data) ? CompatibilityLevel.Normal : CompatibilityLevel.None;
|
|
547
|
-
}
|
|
548
|
-
if (schema.kind === NodeKind.Leaf) {
|
|
549
|
-
return CompatibilityLevel.None;
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
// Typing (of schema based constructors and thus implicit node construction)
|
|
553
|
-
// allows iterables for constructing maps and arrays.
|
|
554
|
-
// Some users of this API may have unions of maps and arrays,
|
|
555
|
-
// and rely on Arrays ending up as array nodes and maps as Map nodes,
|
|
556
|
-
// despite both being iterable and thus compatible with both.
|
|
557
|
-
// This uses a priority based system where an array would be parsed as an array when unioned with a map,
|
|
558
|
-
// but if in a map only context, could still be used as a map.
|
|
559
|
-
|
|
560
|
-
if (data instanceof Map) {
|
|
561
|
-
switch (schema.kind) {
|
|
562
|
-
case NodeKind.Map:
|
|
563
|
-
return CompatibilityLevel.Normal;
|
|
564
|
-
case NodeKind.Array:
|
|
565
|
-
// Maps are iterable, so type checking does allow constructing an ArrayNode from a map if the array's type is an array that includes the key and value types of the map.
|
|
566
|
-
return CompatibilityLevel.Low;
|
|
567
|
-
default:
|
|
568
|
-
return CompatibilityLevel.None;
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
if (isReadonlyArray(data)) {
|
|
573
|
-
switch (schema.kind) {
|
|
574
|
-
case NodeKind.Array:
|
|
575
|
-
return CompatibilityLevel.Normal;
|
|
576
|
-
case NodeKind.Map:
|
|
577
|
-
// Arrays are iterable, so type checking does allow constructing an array from a MapNode from an if the array's type is key values pairs for the map.
|
|
578
|
-
return CompatibilityLevel.Low;
|
|
579
|
-
default:
|
|
580
|
-
return CompatibilityLevel.None;
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
const mapOrArray = schema.kind === NodeKind.Array || schema.kind === NodeKind.Map;
|
|
585
|
-
|
|
586
|
-
if (Symbol.iterator in data) {
|
|
587
|
-
return mapOrArray ? CompatibilityLevel.Normal : CompatibilityLevel.None;
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
// At this point, it is assumed data is a record-like object since all the other cases have been eliminated.
|
|
591
|
-
|
|
592
|
-
if (schema.kind === NodeKind.Record) {
|
|
593
|
-
return CompatibilityLevel.Normal;
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
if (schema.kind === NodeKind.Array) {
|
|
597
|
-
return CompatibilityLevel.None;
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
if (schema.kind === NodeKind.Map) {
|
|
601
|
-
// When not unioned with an ObjectNode, allow objects to be used to create maps.
|
|
602
|
-
return CompatibilityLevel.Low;
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
assert(isObjectNodeSchema(schema), 0x9e6 /* unexpected schema kind */);
|
|
606
|
-
|
|
607
|
-
// TODO: Improve type inference by making this logic more thorough. Handle at least:
|
|
608
|
-
// * Types which are strict subsets of other types in the same polymorphic union
|
|
609
|
-
// * Types which have the same keys but different types for those keys in the polymorphic union
|
|
610
|
-
// * Types which have the same required fields but different optional fields and enough of those optional fields are populated to disambiguate
|
|
611
|
-
|
|
612
|
-
// TODO#7441: Consider allowing data to be inserted which has keys that are extraneous/unknown to the schema (those keys are ignored)
|
|
613
|
-
|
|
614
|
-
// If the schema has a required key which is not present in the input object, reject it.
|
|
615
|
-
for (const [fieldKey, fieldSchema] of schema.fields) {
|
|
616
|
-
if (fieldSchema.requiresValue) {
|
|
617
|
-
if (getFieldProperty(data, fieldKey) === undefined) {
|
|
618
|
-
return CompatibilityLevel.None;
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
return CompatibilityLevel.Normal;
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
function allowsValue(schema: TreeNodeSchema, value: TreeValue): boolean {
|
|
627
|
-
if (schema.kind === NodeKind.Leaf) {
|
|
628
|
-
return valueSchemaAllows(schema.info as ValueSchema, value);
|
|
629
|
-
}
|
|
630
|
-
return false;
|
|
631
|
-
}
|
|
632
|
-
|
|
633
151
|
/**
|
|
634
152
|
* Content which can be used to build a node.
|
|
635
153
|
* @remarks
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type {
|
|
7
|
+
ImplicitAllowedTypes,
|
|
8
|
+
InsertableTreeNodeFromImplicitAllowedTypes,
|
|
9
|
+
} from "./core/index.js";
|
|
10
|
+
import type {
|
|
11
|
+
ImplicitFieldSchema,
|
|
12
|
+
InsertableTreeFieldFromImplicitField,
|
|
13
|
+
} from "./fieldSchema.js";
|
|
14
|
+
import type { InsertableContent } from "./unhydratedFlexTreeFromInsertable.js";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* {@inheritdoc (UnsafeUnknownSchema:type)}
|
|
18
|
+
* @alpha
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export const UnsafeUnknownSchema: unique symbol = Symbol("UnsafeUnknownSchema");
|
|
22
|
+
/**
|
|
23
|
+
* A special type which can be provided to some APIs as the schema type parameter when schema cannot easily be provided at compile time and an unsafe (instead of disabled) editing API is desired.
|
|
24
|
+
* @remarks
|
|
25
|
+
* When used, this means the TypeScript typing should err on the side of completeness (allow all inputs that could be valid).
|
|
26
|
+
* This introduces the risk that out-of-schema data could be allowed at compile time, and only error at runtime.
|
|
27
|
+
*
|
|
28
|
+
* @privateRemarks
|
|
29
|
+
* This only applies to APIs which input data which is expected to be in schema, since APIs outputting have easy mechanisms to do so in a type safe way even when the schema is unknown.
|
|
30
|
+
* In most cases that amounts to returning `TreeNode | TreeLeafValue`.
|
|
31
|
+
*
|
|
32
|
+
* This can be contrasted with the default behavior of TypeScript, which is to require the intersection of the possible types for input APIs,
|
|
33
|
+
* which for unknown schema defining input trees results in the `never` type.
|
|
34
|
+
*
|
|
35
|
+
* Any APIs which use this must produce UsageErrors when out of schema data is encountered, and never produce unrecoverable errors,
|
|
36
|
+
* or silently accept invalid data.
|
|
37
|
+
* This is currently only type exported from the package: the symbol is just used as a way to get a named type.
|
|
38
|
+
* @alpha
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
export type UnsafeUnknownSchema = typeof UnsafeUnknownSchema;
|
|
42
|
+
/**
|
|
43
|
+
* Content which could be inserted into a tree.
|
|
44
|
+
*
|
|
45
|
+
* @see {@link Input}
|
|
46
|
+
* @remarks
|
|
47
|
+
* Extended version of {@link InsertableTreeNodeFromImplicitAllowedTypes} that also allows {@link (UnsafeUnknownSchema:type)}.
|
|
48
|
+
* @alpha
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
export type Insertable<TSchema extends ImplicitAllowedTypes | UnsafeUnknownSchema> =
|
|
52
|
+
TSchema extends ImplicitAllowedTypes
|
|
53
|
+
? InsertableTreeNodeFromImplicitAllowedTypes<TSchema>
|
|
54
|
+
: InsertableContent;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Content which could be inserted into a field within a tree.
|
|
58
|
+
*
|
|
59
|
+
* @see {@link Input}
|
|
60
|
+
* @remarks
|
|
61
|
+
* Extended version of {@link InsertableTreeFieldFromImplicitField} that also allows {@link (UnsafeUnknownSchema:type)}.
|
|
62
|
+
* @alpha
|
|
63
|
+
*/
|
|
64
|
+
export type InsertableField<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> = [
|
|
65
|
+
TSchema,
|
|
66
|
+
] extends [ImplicitFieldSchema]
|
|
67
|
+
? InsertableTreeFieldFromImplicitField<TSchema>
|
|
68
|
+
: [TSchema] extends [UnsafeUnknownSchema]
|
|
69
|
+
? InsertableContent | undefined
|
|
70
|
+
: never;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { type TreeNodeSchema, walkAllowedTypes, type SchemaVisitor } from "./core/index.js";
|
|
7
|
-
import { type ImplicitFieldSchema, normalizeFieldSchema } from "./
|
|
7
|
+
import { type ImplicitFieldSchema, normalizeFieldSchema } from "./fieldSchema.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Traverses all {@link TreeNodeSchema} schema reachable from `schema`, applying the visitor pattern.
|
package/src/treeFactory.ts
CHANGED
|
@@ -100,7 +100,6 @@ export const SharedTree = configuredSharedTree({});
|
|
|
100
100
|
* TreeCompressionStrategy,
|
|
101
101
|
* configuredSharedTree,
|
|
102
102
|
* typeboxValidator,
|
|
103
|
-
* // eslint-disable-next-line import/no-internal-modules
|
|
104
103
|
* } from "@fluidframework/tree/internal";
|
|
105
104
|
* const SharedTree = configuredSharedTree({
|
|
106
105
|
* forest: ForestTypeReference,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discrepancies.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/discrepancies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,mBAAmB,EAMxB,KAAK,wBAAwB,EAE7B,KAAK,gBAAgB,EAErB,KAAK,WAAW,EAChB,MAAM,qBAAqB,CAAC;AAO7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,sBAAsB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACxC;;;;OAIG;IACH,UAAU,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACjD;;;;;OAKG;IACH,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAuB,SAAQ,wBAAwB;IACvE,QAAQ,EAAE,cAAc,CAAC;IACzB;;OAEG;IACH,IAAI,EAAE,wBAAwB,EAAE,CAAC;IACjC;;OAEG;IACH,MAAM,EAAE,wBAAwB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IACrE,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,mBAAmB,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACtC,UAAU,EAAE,wBAAwB,CAAC;IACrC,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,wBAAwB,CAAC;IACrC,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACxC,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACrC,UAAU,EAAE,wBAAwB,CAAC;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,KAAK,qBAAqB,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAavD;;;;;;;;;;GAUG;AACH,wBAAiB,8BAA8B,CAC9C,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,gBAAgB,GACtB,QAAQ,CAAC,WAAW,CAAC,CAuCvB;AAyLD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAkCxF;AAqBD;;;;;GAKG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;AAgB/C;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,mBAAmB,CAegC,CAAC;AAEzF,eAAO,MAAM,qBAAqB;;;;;CAKxB,CAAC;AACX,KAAK,qBAAqB,GACzB,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAEpE,wBAAgB,oBAAoB,CAAC,CAAC,EACrC,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GACnB,qBAAqB,CAqBvB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAKtE"}
|