@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,27 +4,19 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { Lazy } from "@fluidframework/core-utils/internal";
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
isTreeValue,
|
|
11
|
+
type FlexibleNodeContent,
|
|
12
|
+
type FlexTreeNode,
|
|
13
|
+
type FlexTreeOptionalField,
|
|
14
|
+
type OptionalFieldEditBuilder,
|
|
12
15
|
} from "../../../feature-libraries/index.js";
|
|
13
16
|
import { tryGetTreeNodeForField } from "../../getTreeNodeForField.js";
|
|
17
|
+
import { createFieldSchema, FieldKind } from "../../fieldSchema.js";
|
|
14
18
|
import {
|
|
15
|
-
|
|
16
|
-
FieldKind,
|
|
17
|
-
normalizeAllowedTypes,
|
|
18
|
-
normalizeAnnotatedAllowedTypes,
|
|
19
|
-
unannotateImplicitAllowedTypes,
|
|
20
|
-
type ImplicitAllowedTypes,
|
|
21
|
-
type ImplicitAnnotatedAllowedTypes,
|
|
22
|
-
type InsertableTreeNodeFromImplicitAllowedTypes,
|
|
23
|
-
type NodeSchemaMetadata,
|
|
24
|
-
type TreeNodeFromImplicitAllowedTypes,
|
|
25
|
-
type UnannotateImplicitAllowedTypes,
|
|
26
|
-
} from "../../schemaTypes.js";
|
|
27
|
-
import {
|
|
19
|
+
CompatibilityLevel,
|
|
28
20
|
getKernel,
|
|
29
21
|
type InnerNode,
|
|
30
22
|
NodeKind,
|
|
@@ -33,11 +25,25 @@ import {
|
|
|
33
25
|
typeNameSymbol,
|
|
34
26
|
type TreeNode,
|
|
35
27
|
typeSchemaSymbol,
|
|
36
|
-
type Context,
|
|
37
28
|
getOrCreateInnerNode,
|
|
38
29
|
type InternalTreeNode,
|
|
39
30
|
type UnhydratedFlexTreeNode,
|
|
40
|
-
|
|
31
|
+
normalizeAllowedTypes,
|
|
32
|
+
unannotateImplicitAllowedTypes,
|
|
33
|
+
type ImplicitAllowedTypes,
|
|
34
|
+
type ImplicitAnnotatedAllowedTypes,
|
|
35
|
+
type InsertableTreeNodeFromImplicitAllowedTypes,
|
|
36
|
+
type NodeSchemaMetadata,
|
|
37
|
+
type TreeNodeFromImplicitAllowedTypes,
|
|
38
|
+
type UnannotateImplicitAllowedTypes,
|
|
39
|
+
TreeNodeValid,
|
|
40
|
+
type MostDerivedData,
|
|
41
|
+
type TreeNodeSchemaInitializedData,
|
|
42
|
+
type TreeNodeSchemaCorePrivate,
|
|
43
|
+
privateDataSymbol,
|
|
44
|
+
createTreeNodeSchemaPrivateData,
|
|
45
|
+
type FlexContent,
|
|
46
|
+
type TreeNodeSchemaPrivateData,
|
|
41
47
|
} from "../../core/index.js";
|
|
42
48
|
import {
|
|
43
49
|
unhydratedFlexTreeFromInsertable,
|
|
@@ -48,12 +54,17 @@ import { prepareForInsertion } from "../../prepareForInsertion.js";
|
|
|
48
54
|
import {
|
|
49
55
|
brand,
|
|
50
56
|
count,
|
|
57
|
+
isReadonlyArray,
|
|
51
58
|
type JsonCompatibleReadOnlyObject,
|
|
52
59
|
type RestrictiveStringRecord,
|
|
53
60
|
} from "../../../util/index.js";
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
|
|
61
|
+
import { getTreeNodeSchemaInitializedData } from "../../createContext.js";
|
|
62
|
+
import type {
|
|
63
|
+
MapNodeCustomizableSchema,
|
|
64
|
+
MapNodePojoEmulationSchema,
|
|
65
|
+
MapNodeSchema,
|
|
66
|
+
} from "./mapNodeTypes.js";
|
|
67
|
+
import { recordLikeDataToFlexContent } from "../common.js";
|
|
57
68
|
|
|
58
69
|
/**
|
|
59
70
|
* A map of string keys to tree objects.
|
|
@@ -254,12 +265,11 @@ export function mapSchema<
|
|
|
254
265
|
const lazyChildTypes = new Lazy(() =>
|
|
255
266
|
normalizeAllowedTypes(unannotateImplicitAllowedTypes(info)),
|
|
256
267
|
);
|
|
257
|
-
const lazyAnnotatedTypes = new Lazy(() => [normalizeAnnotatedAllowedTypes(info)]);
|
|
258
268
|
const lazyAllowedTypesIdentifiers = new Lazy(
|
|
259
269
|
() => new Set([...lazyChildTypes.value].map((type) => type.identifier)),
|
|
260
270
|
);
|
|
261
271
|
|
|
262
|
-
let
|
|
272
|
+
let privateData: TreeNodeSchemaPrivateData | undefined;
|
|
263
273
|
|
|
264
274
|
class Schema
|
|
265
275
|
extends CustomMapNodeBase<UnannotateImplicitAllowedTypes<T>>
|
|
@@ -290,10 +300,12 @@ export function mapSchema<
|
|
|
290
300
|
|
|
291
301
|
protected static override constructorCached: MostDerivedData | undefined = undefined;
|
|
292
302
|
|
|
293
|
-
protected static override oneTimeSetup
|
|
294
|
-
const schema = this as
|
|
295
|
-
|
|
296
|
-
|
|
303
|
+
protected static override oneTimeSetup(): TreeNodeSchemaInitializedData {
|
|
304
|
+
const schema = this as MapNodeSchema;
|
|
305
|
+
return getTreeNodeSchemaInitializedData(this, {
|
|
306
|
+
shallowCompatibilityTest,
|
|
307
|
+
toFlexContent: (data: FactoryContent): FlexContent => mapToFlexContent(data, schema),
|
|
308
|
+
});
|
|
297
309
|
}
|
|
298
310
|
|
|
299
311
|
public static readonly identifier = identifier;
|
|
@@ -303,9 +315,6 @@ export function mapSchema<
|
|
|
303
315
|
public static get childTypes(): ReadonlySet<TreeNodeSchema> {
|
|
304
316
|
return lazyChildTypes.value;
|
|
305
317
|
}
|
|
306
|
-
public static get childAnnotatedAllowedTypes(): readonly NormalizedAnnotatedAllowedTypes[] {
|
|
307
|
-
return lazyAnnotatedTypes.value;
|
|
308
|
-
}
|
|
309
318
|
public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
|
|
310
319
|
public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
|
|
311
320
|
persistedMetadata;
|
|
@@ -317,6 +326,10 @@ export function mapSchema<
|
|
|
317
326
|
public get [typeSchemaSymbol](): typeof schemaErased {
|
|
318
327
|
return Schema.constructorCached?.constructor as unknown as typeof schemaErased;
|
|
319
328
|
}
|
|
329
|
+
|
|
330
|
+
public static get [privateDataSymbol](): TreeNodeSchemaPrivateData {
|
|
331
|
+
return (privateData ??= createTreeNodeSchemaPrivateData(this, [info]));
|
|
332
|
+
}
|
|
320
333
|
}
|
|
321
334
|
const schemaErased: MapNodeCustomizableSchema<
|
|
322
335
|
TName,
|
|
@@ -324,7 +337,8 @@ export function mapSchema<
|
|
|
324
337
|
ImplicitlyConstructable,
|
|
325
338
|
TCustomMetadata
|
|
326
339
|
> &
|
|
327
|
-
MapNodePojoEmulationSchema<TName, T, ImplicitlyConstructable, TCustomMetadata>
|
|
340
|
+
MapNodePojoEmulationSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> &
|
|
341
|
+
TreeNodeSchemaCorePrivate = Schema;
|
|
328
342
|
return schemaErased;
|
|
329
343
|
}
|
|
330
344
|
|
|
@@ -335,3 +349,47 @@ export function mapSchema<
|
|
|
335
349
|
export type MapNodeInsertableData<T extends ImplicitAllowedTypes> =
|
|
336
350
|
| Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]>
|
|
337
351
|
| RestrictiveStringRecord<InsertableTreeNodeFromImplicitAllowedTypes<T>>;
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* {@link TreeNodeSchemaInitializedData.shallowCompatibilityTest} for Map nodes.
|
|
355
|
+
*/
|
|
356
|
+
function shallowCompatibilityTest(data: FactoryContent): CompatibilityLevel {
|
|
357
|
+
if (isTreeValue(data)) {
|
|
358
|
+
return CompatibilityLevel.None;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
if (isReadonlyArray(data)) {
|
|
362
|
+
// Arrays are iterable, so type checking does allow constructing a MapNode from an array if the array's type is key values pairs for the map.
|
|
363
|
+
return CompatibilityLevel.Low;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
if (Symbol.iterator in data) {
|
|
367
|
+
return CompatibilityLevel.Normal;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// When not unioned with an ObjectNode, allow objects to be used to create maps.
|
|
371
|
+
return CompatibilityLevel.Low;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* {@link TreeNodeSchemaInitializedData.toFlexContent} for Map nodes.
|
|
376
|
+
*
|
|
377
|
+
* Transforms data under a Map schema.
|
|
378
|
+
* @param data - The tree data to be transformed. Must be an iterable or Record like object.
|
|
379
|
+
* @param schema - The schema to comply with.
|
|
380
|
+
*/
|
|
381
|
+
function mapToFlexContent(data: FactoryContent, schema: MapNodeSchema): FlexContent {
|
|
382
|
+
if (!(typeof data === "object" && data !== null)) {
|
|
383
|
+
throw new UsageError(`Input data is incompatible with Map schema: ${data}`);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
const fieldsIterator = (
|
|
387
|
+
Symbol.iterator in data
|
|
388
|
+
? // Support iterables of key value pairs (including Map objects)
|
|
389
|
+
data
|
|
390
|
+
: // Support record objects for JSON style Map data
|
|
391
|
+
Object.entries(data)
|
|
392
|
+
) as Iterable<readonly [string, InsertableContent]>;
|
|
393
|
+
|
|
394
|
+
return recordLikeDataToFlexContent(fieldsIterator, schema);
|
|
395
|
+
}
|
|
@@ -4,16 +4,14 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { MapNodeInsertableData, TreeMapNode } from "./mapNode.js";
|
|
7
|
+
import { NodeKind } from "../../core/index.js";
|
|
7
8
|
import type {
|
|
9
|
+
TreeNodeSchemaClass,
|
|
10
|
+
TreeNodeSchema,
|
|
11
|
+
TreeNodeSchemaNonClass,
|
|
12
|
+
WithType,
|
|
8
13
|
ImplicitAnnotatedAllowedTypes,
|
|
9
14
|
UnannotateImplicitAllowedTypes,
|
|
10
|
-
} from "../../schemaTypes.js";
|
|
11
|
-
import {
|
|
12
|
-
NodeKind,
|
|
13
|
-
type TreeNodeSchemaClass,
|
|
14
|
-
type TreeNodeSchema,
|
|
15
|
-
type TreeNodeSchemaNonClass,
|
|
16
|
-
type WithType,
|
|
17
15
|
} from "../../core/index.js";
|
|
18
16
|
|
|
19
17
|
import type { SimpleMapNodeSchema } from "../../simpleSchema.js";
|
|
@@ -12,9 +12,11 @@ export {
|
|
|
12
12
|
objectSchema,
|
|
13
13
|
setField,
|
|
14
14
|
type TreeObjectNode,
|
|
15
|
+
type SimpleKeyMap,
|
|
15
16
|
} from "./objectNode.js";
|
|
16
17
|
export {
|
|
17
18
|
isObjectNodeSchema,
|
|
18
19
|
ObjectNodeSchema,
|
|
19
20
|
type ObjectNodeSchemaPrivate,
|
|
21
|
+
type UnannotateSchemaRecord,
|
|
20
22
|
} from "./objectNodeTypes.js";
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
import { assert, Lazy, fail, debugAssert } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
|
+
import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
|
|
8
9
|
|
|
9
10
|
import type { FieldKey, SchemaPolicy } from "../../../core/index.js";
|
|
10
11
|
import {
|
|
11
12
|
FieldKinds,
|
|
13
|
+
isTreeValue,
|
|
12
14
|
type FlexTreeField,
|
|
13
15
|
type FlexTreeNode,
|
|
14
16
|
type FlexTreeOptionalField,
|
|
@@ -19,8 +21,10 @@ import type {
|
|
|
19
21
|
FlattenKeys,
|
|
20
22
|
JsonCompatibleReadOnlyObject,
|
|
21
23
|
} from "../../../util/index.js";
|
|
24
|
+
import { brand } from "../../../util/index.js";
|
|
22
25
|
|
|
23
26
|
import {
|
|
27
|
+
CompatibilityLevel,
|
|
24
28
|
type TreeNodeSchema,
|
|
25
29
|
NodeKind,
|
|
26
30
|
type WithType,
|
|
@@ -29,18 +33,34 @@ import {
|
|
|
29
33
|
typeSchemaSymbol,
|
|
30
34
|
type InternalTreeNode,
|
|
31
35
|
type TreeNode,
|
|
32
|
-
type Context,
|
|
33
36
|
type UnhydratedFlexTreeNode,
|
|
34
37
|
getOrCreateInnerNode,
|
|
35
|
-
type
|
|
38
|
+
type NodeSchemaMetadata,
|
|
39
|
+
type ImplicitAllowedTypes,
|
|
40
|
+
type ImplicitAnnotatedAllowedTypes,
|
|
41
|
+
unannotateImplicitAllowedTypes,
|
|
42
|
+
TreeNodeValid,
|
|
43
|
+
type MostDerivedData,
|
|
44
|
+
type TreeNodeSchemaInitializedData,
|
|
45
|
+
privateDataSymbol,
|
|
46
|
+
createTreeNodeSchemaPrivateData,
|
|
47
|
+
type FlexContent,
|
|
48
|
+
type UnhydratedFlexTreeField,
|
|
49
|
+
createField,
|
|
50
|
+
type TreeNodeSchemaCorePrivate,
|
|
51
|
+
type TreeNodeSchemaPrivateData,
|
|
36
52
|
} from "../../core/index.js";
|
|
37
|
-
import {
|
|
53
|
+
import {
|
|
54
|
+
getTreeNodeSchemaInitializedData,
|
|
55
|
+
getUnhydratedContext,
|
|
56
|
+
} from "../../createContext.js";
|
|
38
57
|
import { tryGetTreeNodeForField } from "../../getTreeNodeForField.js";
|
|
39
58
|
import {
|
|
40
59
|
isObjectNodeSchema,
|
|
41
60
|
type ObjectNodeSchema,
|
|
42
61
|
type ObjectNodeSchemaInternalData,
|
|
43
62
|
type ObjectNodeSchemaPrivate,
|
|
63
|
+
type UnannotateSchemaRecord,
|
|
44
64
|
} from "./objectNodeTypes.js";
|
|
45
65
|
import { prepareForInsertion } from "../../prepareForInsertion.js";
|
|
46
66
|
import {
|
|
@@ -49,21 +69,25 @@ import {
|
|
|
49
69
|
getExplicitStoredKey,
|
|
50
70
|
type TreeFieldFromImplicitField,
|
|
51
71
|
type InsertableTreeFieldFromImplicitField,
|
|
52
|
-
|
|
72
|
+
FieldSchema,
|
|
73
|
+
FieldSchemaAlpha,
|
|
53
74
|
normalizeFieldSchema,
|
|
54
75
|
FieldKind,
|
|
55
|
-
type NodeSchemaMetadata,
|
|
56
|
-
type FieldSchemaAlpha,
|
|
57
|
-
ObjectFieldSchema,
|
|
58
76
|
type ImplicitAnnotatedFieldSchema,
|
|
59
|
-
type
|
|
60
|
-
|
|
77
|
+
type FieldProps,
|
|
78
|
+
type ContextualFieldProvider,
|
|
79
|
+
extractFieldProvider,
|
|
80
|
+
isConstant,
|
|
81
|
+
} from "../../fieldSchema.js";
|
|
61
82
|
import type { SimpleObjectFieldSchema } from "../../simpleSchema.js";
|
|
62
83
|
import {
|
|
63
84
|
unhydratedFlexTreeFromInsertable,
|
|
85
|
+
unhydratedFlexTreeFromInsertableNode,
|
|
86
|
+
type FactoryContent,
|
|
87
|
+
type FactoryContentObject,
|
|
64
88
|
type InsertableContent,
|
|
65
89
|
} from "../../unhydratedFlexTreeFromInsertable.js";
|
|
66
|
-
import {
|
|
90
|
+
import { convertFieldKind } from "../../toStoredSchema.js";
|
|
67
91
|
|
|
68
92
|
/**
|
|
69
93
|
* Generates the properties for an ObjectNode from its field schema object.
|
|
@@ -170,7 +194,7 @@ export type InsertableObjectFromSchemaRecord<
|
|
|
170
194
|
/**
|
|
171
195
|
* Helper used to remove annotations from a schema record and produce insertable objects,
|
|
172
196
|
*
|
|
173
|
-
* @
|
|
197
|
+
* @privateRemarks
|
|
174
198
|
* This calls {@link InsertableObjectFromSchemaRecord} in order to produce the insertable objects.
|
|
175
199
|
*
|
|
176
200
|
* @system @alpha
|
|
@@ -345,6 +369,30 @@ export function setField(
|
|
|
345
369
|
}
|
|
346
370
|
}
|
|
347
371
|
|
|
372
|
+
/**
|
|
373
|
+
* {@link FieldSchemaAlpha} including {@link SimpleObjectFieldSchema}.
|
|
374
|
+
*/
|
|
375
|
+
export class ObjectFieldSchema<
|
|
376
|
+
Kind extends FieldKind,
|
|
377
|
+
Types extends ImplicitAllowedTypes,
|
|
378
|
+
TCustomMetadata = unknown,
|
|
379
|
+
>
|
|
380
|
+
extends FieldSchemaAlpha<Kind, Types, TCustomMetadata>
|
|
381
|
+
implements SimpleObjectFieldSchema
|
|
382
|
+
{
|
|
383
|
+
public readonly storedKey: string;
|
|
384
|
+
|
|
385
|
+
public constructor(
|
|
386
|
+
kind: Kind,
|
|
387
|
+
allowedTypes: Types,
|
|
388
|
+
annotatedTypes: ImplicitAnnotatedAllowedTypes,
|
|
389
|
+
props: FieldProps<TCustomMetadata> & { readonly key: string },
|
|
390
|
+
) {
|
|
391
|
+
super(kind, allowedTypes, annotatedTypes, props);
|
|
392
|
+
this.storedKey = props.key;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
348
396
|
abstract class CustomObjectNodeBase<
|
|
349
397
|
const T extends RestrictiveStringRecord<ImplicitFieldSchema>,
|
|
350
398
|
> extends TreeNodeValid<InsertableObjectFromSchemaRecord<T>> {
|
|
@@ -371,7 +419,8 @@ export function objectSchema<
|
|
|
371
419
|
metadata?: NodeSchemaMetadata<TCustomMetadata>,
|
|
372
420
|
persistedMetadata?: JsonCompatibleReadOnlyObject | undefined,
|
|
373
421
|
): ObjectNodeSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> &
|
|
374
|
-
ObjectNodeSchemaInternalData
|
|
422
|
+
ObjectNodeSchemaInternalData &
|
|
423
|
+
TreeNodeSchemaCorePrivate {
|
|
375
424
|
// Field set can't be modified after this since derived data is stored in maps.
|
|
376
425
|
Object.freeze(info);
|
|
377
426
|
|
|
@@ -392,16 +441,11 @@ export function objectSchema<
|
|
|
392
441
|
const lazyChildTypes = new Lazy(
|
|
393
442
|
() => new Set(Array.from(flexKeyMap.values(), (f) => [...f.schema.allowedTypeSet]).flat()),
|
|
394
443
|
);
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
flexKeyMap.values(),
|
|
398
|
-
({ schema }) => normalizeFieldSchema(schema).annotatedAllowedTypesNormalized,
|
|
399
|
-
),
|
|
400
|
-
);
|
|
444
|
+
|
|
445
|
+
let privateData: TreeNodeSchemaPrivateData | undefined;
|
|
401
446
|
|
|
402
447
|
let handler: ProxyHandler<object>;
|
|
403
448
|
let customizable: boolean;
|
|
404
|
-
let unhydratedContext: Context;
|
|
405
449
|
|
|
406
450
|
class CustomObjectNode extends CustomObjectNodeBase<UnannotateSchemaRecord<T>> {
|
|
407
451
|
public static readonly fields: ReadonlyMap<
|
|
@@ -474,12 +518,11 @@ export function objectSchema<
|
|
|
474
518
|
|
|
475
519
|
protected static override constructorCached: MostDerivedData | undefined = undefined;
|
|
476
520
|
|
|
477
|
-
protected static override oneTimeSetup
|
|
521
|
+
protected static override oneTimeSetup(): TreeNodeSchemaInitializedData {
|
|
478
522
|
// One time initialization that required knowing the most derived type (from this.constructor) and thus has to be lazy.
|
|
479
523
|
customizable = (this as unknown) !== CustomObjectNode;
|
|
480
524
|
const schema = this as unknown as ObjectNodeSchemaPrivate;
|
|
481
525
|
handler = createProxyHandler(schema, customizable);
|
|
482
|
-
unhydratedContext = getUnhydratedContext(schema);
|
|
483
526
|
|
|
484
527
|
// First run, do extra validation.
|
|
485
528
|
// TODO: provide a way for TreeConfiguration to trigger this same validation to ensure it gets run early.
|
|
@@ -506,7 +549,14 @@ export function objectSchema<
|
|
|
506
549
|
}
|
|
507
550
|
}
|
|
508
551
|
|
|
509
|
-
return
|
|
552
|
+
return getTreeNodeSchemaInitializedData(schema, {
|
|
553
|
+
shallowCompatibilityTest: (data: FactoryContent): CompatibilityLevel =>
|
|
554
|
+
shallowCompatibilityTest(data, schema),
|
|
555
|
+
toFlexContent: (
|
|
556
|
+
data: FactoryContent,
|
|
557
|
+
allowedTypes: ReadonlySet<TreeNodeSchema>,
|
|
558
|
+
): FlexContent => objectToFlexContent(data, schema),
|
|
559
|
+
});
|
|
510
560
|
}
|
|
511
561
|
|
|
512
562
|
public static readonly identifier = identifier;
|
|
@@ -516,9 +566,6 @@ export function objectSchema<
|
|
|
516
566
|
public static get childTypes(): ReadonlySet<TreeNodeSchema> {
|
|
517
567
|
return lazyChildTypes.value;
|
|
518
568
|
}
|
|
519
|
-
public static get childAnnotatedAllowedTypes(): readonly NormalizedAnnotatedAllowedTypes[] {
|
|
520
|
-
return lazyAnnotatedTypes.value;
|
|
521
|
-
}
|
|
522
569
|
public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
|
|
523
570
|
public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
|
|
524
571
|
persistedMetadata;
|
|
@@ -530,6 +577,16 @@ export function objectSchema<
|
|
|
530
577
|
public get [typeSchemaSymbol](): Output {
|
|
531
578
|
return CustomObjectNode.constructorCached?.constructor as unknown as Output;
|
|
532
579
|
}
|
|
580
|
+
|
|
581
|
+
public static get [privateDataSymbol](): TreeNodeSchemaPrivateData {
|
|
582
|
+
return (privateData ??= createTreeNodeSchemaPrivateData(
|
|
583
|
+
this,
|
|
584
|
+
Array.from(
|
|
585
|
+
flexKeyMap.values(),
|
|
586
|
+
({ schema }) => normalizeFieldSchema(schema).annotatedAllowedTypes,
|
|
587
|
+
),
|
|
588
|
+
));
|
|
589
|
+
}
|
|
533
590
|
}
|
|
534
591
|
type Output = typeof CustomObjectNode &
|
|
535
592
|
(new (
|
|
@@ -538,6 +595,20 @@ export function objectSchema<
|
|
|
538
595
|
return CustomObjectNode as Output;
|
|
539
596
|
}
|
|
540
597
|
|
|
598
|
+
/**
|
|
599
|
+
* Removes annotations from a schema record.
|
|
600
|
+
*/
|
|
601
|
+
export function unannotateSchemaRecord<
|
|
602
|
+
Schema extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>,
|
|
603
|
+
>(schemaRecord: Schema): UnannotateSchemaRecord<Schema> {
|
|
604
|
+
return Object.fromEntries(
|
|
605
|
+
Object.entries(schemaRecord).map(([key, schema]) => [
|
|
606
|
+
key,
|
|
607
|
+
schema instanceof FieldSchema ? schema : unannotateImplicitAllowedTypes(schema),
|
|
608
|
+
]),
|
|
609
|
+
) as UnannotateSchemaRecord<Schema>;
|
|
610
|
+
}
|
|
611
|
+
|
|
541
612
|
const targetToProxy: WeakMap<object, TreeNode> = new WeakMap();
|
|
542
613
|
|
|
543
614
|
/**
|
|
@@ -595,3 +666,112 @@ export function createUnknownOptionalFieldPolicy(
|
|
|
595
666
|
);
|
|
596
667
|
};
|
|
597
668
|
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* {@link TreeNodeSchemaInitializedData.toFlexContent} for Map nodes.
|
|
672
|
+
*
|
|
673
|
+
* Transforms data under an Object schema.
|
|
674
|
+
* @param data - The tree data to be transformed. Must be a Record-like object.
|
|
675
|
+
* @param schema - The schema to comply with.
|
|
676
|
+
*/
|
|
677
|
+
function objectToFlexContent(
|
|
678
|
+
data: FactoryContent,
|
|
679
|
+
schema: TreeNodeSchema & ObjectNodeSchemaInternalData,
|
|
680
|
+
): FlexContent {
|
|
681
|
+
if (
|
|
682
|
+
typeof data !== "object" ||
|
|
683
|
+
data === null ||
|
|
684
|
+
Symbol.iterator in data ||
|
|
685
|
+
isFluidHandle(data)
|
|
686
|
+
) {
|
|
687
|
+
throw new UsageError(`Input data is incompatible with Object schema: ${data}`);
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
const fields = new Map<FieldKey, UnhydratedFlexTreeField>();
|
|
691
|
+
const context = getUnhydratedContext(schema).flexContext;
|
|
692
|
+
|
|
693
|
+
for (const [key, fieldInfo] of schema.flexKeyMap) {
|
|
694
|
+
const value = getFieldProperty(data, key);
|
|
695
|
+
|
|
696
|
+
let children: UnhydratedFlexTreeNode[] | ContextualFieldProvider;
|
|
697
|
+
if (value === undefined) {
|
|
698
|
+
const defaultProvider =
|
|
699
|
+
fieldInfo.schema.props?.defaultProvider ??
|
|
700
|
+
fail(0xbb1 /* missing field has no default provider */);
|
|
701
|
+
const fieldProvider = extractFieldProvider(defaultProvider);
|
|
702
|
+
children = isConstant(fieldProvider) ? fieldProvider() : fieldProvider;
|
|
703
|
+
} else {
|
|
704
|
+
children = [
|
|
705
|
+
unhydratedFlexTreeFromInsertableNode(value, fieldInfo.schema.allowedTypeSet),
|
|
706
|
+
];
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
const kind =
|
|
710
|
+
convertFieldKind.get(fieldInfo.schema.kind) ?? fail(0xbb2 /* Invalid field kind */);
|
|
711
|
+
fields.set(
|
|
712
|
+
fieldInfo.storedKey,
|
|
713
|
+
createField(context, kind.identifier, fieldInfo.storedKey, children),
|
|
714
|
+
);
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
return [{ type: brand(schema.identifier) }, fields];
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* {@link TreeNodeSchemaInitializedData.shallowCompatibilityTest} for Object nodes.
|
|
722
|
+
*/
|
|
723
|
+
function shallowCompatibilityTest(
|
|
724
|
+
data: FactoryContent,
|
|
725
|
+
schema: ObjectNodeSchema & ObjectNodeSchemaInternalData,
|
|
726
|
+
): CompatibilityLevel {
|
|
727
|
+
if (isTreeValue(data)) {
|
|
728
|
+
return CompatibilityLevel.None;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
if (Symbol.iterator in data) {
|
|
732
|
+
return CompatibilityLevel.None;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
// TODO: Improve type inference by making this logic more thorough. Handle at least:
|
|
736
|
+
// * Types which are strict subsets of other types in the same polymorphic union
|
|
737
|
+
// * Types which have the same keys but different types for those keys in the polymorphic union
|
|
738
|
+
// * Types which have the same required fields but different optional fields and enough of those optional fields are populated to disambiguate
|
|
739
|
+
|
|
740
|
+
// TODO#7441: Consider allowing data to be inserted which has keys that are extraneous/unknown to the schema (those keys are ignored)
|
|
741
|
+
|
|
742
|
+
// If the schema has a required key which is not present in the input object, reject it.
|
|
743
|
+
for (const [fieldKey, fieldSchema] of schema.fields) {
|
|
744
|
+
if (fieldSchema.requiresValue) {
|
|
745
|
+
if (getFieldProperty(data, fieldKey) === undefined) {
|
|
746
|
+
return CompatibilityLevel.None;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
return CompatibilityLevel.Normal;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/**
|
|
755
|
+
* Check {@link FactoryContentObject} for a property which could be store a field.
|
|
756
|
+
*
|
|
757
|
+
* @returns If the property exists, return its value. Otherwise, returns undefined.
|
|
758
|
+
* @remarks
|
|
759
|
+
* The currently policy is to only consider own properties.
|
|
760
|
+
* See {@link InsertableObjectFromSchemaRecord} for where this policy is documented in the public API.
|
|
761
|
+
*
|
|
762
|
+
* Explicit undefined values are treated the same as missing properties to allow explicit use of undefined with defaulted identifiers.
|
|
763
|
+
*
|
|
764
|
+
* @privateRemarks
|
|
765
|
+
* If we ever want to have an optional field which defaults to something other than undefined, this will need changes.
|
|
766
|
+
* It would need to adjusting the handling of explicit undefined in contexts where undefined is allowed, and a default provider also exists.
|
|
767
|
+
*/
|
|
768
|
+
function getFieldProperty(
|
|
769
|
+
data: FactoryContentObject,
|
|
770
|
+
key: string | symbol,
|
|
771
|
+
): InsertableContent | undefined {
|
|
772
|
+
// This policy only allows own properties.
|
|
773
|
+
if (Object.hasOwnProperty.call(data, key)) {
|
|
774
|
+
return (data as Record<string, InsertableContent>)[key as string];
|
|
775
|
+
}
|
|
776
|
+
return undefined;
|
|
777
|
+
}
|
|
@@ -12,9 +12,14 @@ import type {
|
|
|
12
12
|
import type {
|
|
13
13
|
FieldSchemaAlpha,
|
|
14
14
|
ImplicitAnnotatedFieldSchema,
|
|
15
|
-
|
|
16
|
-
} from "../../
|
|
17
|
-
import {
|
|
15
|
+
UnannotateImplicitFieldSchema,
|
|
16
|
+
} from "../../fieldSchema.js";
|
|
17
|
+
import {
|
|
18
|
+
NodeKind,
|
|
19
|
+
type TreeNodeSchemaClass,
|
|
20
|
+
type TreeNodeSchema,
|
|
21
|
+
type TreeNodeSchemaCorePrivate,
|
|
22
|
+
} from "../../core/index.js";
|
|
18
23
|
import type { FieldKey } from "../../../core/index.js";
|
|
19
24
|
import type { SimpleObjectFieldSchema, SimpleObjectNodeSchema } from "../../simpleSchema.js";
|
|
20
25
|
|
|
@@ -46,10 +51,20 @@ export interface ObjectNodeSchema<
|
|
|
46
51
|
readonly fields: ReadonlyMap<string, FieldSchemaAlpha & SimpleObjectFieldSchema>;
|
|
47
52
|
}
|
|
48
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Removes annotations from field schemas in a schema record.
|
|
56
|
+
* @system @alpha
|
|
57
|
+
*/
|
|
58
|
+
export type UnannotateSchemaRecord<
|
|
59
|
+
T extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>,
|
|
60
|
+
> = {
|
|
61
|
+
readonly [P in Extract<keyof T, string>]: UnannotateImplicitFieldSchema<T[P]>;
|
|
62
|
+
};
|
|
63
|
+
|
|
49
64
|
/**
|
|
50
65
|
* Extra data provided on all {@link ObjectNodeSchema} that is not included in the (soon possibly public) ObjectNodeSchema type.
|
|
51
66
|
*/
|
|
52
|
-
export interface ObjectNodeSchemaInternalData {
|
|
67
|
+
export interface ObjectNodeSchemaInternalData extends TreeNodeSchemaCorePrivate {
|
|
53
68
|
/**
|
|
54
69
|
* {@inheritdoc SimpleKeyMap}
|
|
55
70
|
*/
|
|
@@ -86,7 +101,9 @@ export const ObjectNodeSchema = {
|
|
|
86
101
|
/**
|
|
87
102
|
* {@link ObjectNodeSchema} with data that is not part of the package-exported API surface.
|
|
88
103
|
*/
|
|
89
|
-
export type ObjectNodeSchemaPrivate = ObjectNodeSchema &
|
|
104
|
+
export type ObjectNodeSchemaPrivate = ObjectNodeSchema &
|
|
105
|
+
ObjectNodeSchemaInternalData &
|
|
106
|
+
TreeNodeSchemaCorePrivate;
|
|
90
107
|
|
|
91
108
|
export function isObjectNodeSchema(schema: TreeNodeSchema): schema is ObjectNodeSchemaPrivate {
|
|
92
109
|
return schema.kind === NodeKind.Object;
|