@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,18 +4,20 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
9
|
-
AllowedTypeMetadata,
|
|
10
|
-
AllowedTypesMetadata,
|
|
11
|
-
AnnotatedAllowedTypes,
|
|
12
|
-
ImplicitAnnotatedAllowedTypes,
|
|
13
|
-
TreeLeafValue,
|
|
14
|
-
} from "../schemaTypes.js";
|
|
15
|
-
import type { SimpleNodeSchemaBase } from "../simpleSchema.js";
|
|
7
|
+
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
16
8
|
|
|
9
|
+
import type { SimpleNodeSchemaBase } from "../simpleSchema.js";
|
|
17
10
|
import type { TreeNode } from "./treeNode.js";
|
|
18
11
|
import type { InternalTreeNode, Unhydrated } from "./types.js";
|
|
12
|
+
import type { UnionToIntersection } from "../../util/index.js";
|
|
13
|
+
import type {
|
|
14
|
+
ImplicitAnnotatedAllowedTypes,
|
|
15
|
+
NormalizedAnnotatedAllowedTypes,
|
|
16
|
+
} from "./allowedTypes.js";
|
|
17
|
+
import type { Context } from "./context.js";
|
|
18
|
+
import type { FieldKey, NodeData } from "../../core/index.js";
|
|
19
|
+
import type { UnhydratedFlexTreeField } from "./unhydratedFlexTree.js";
|
|
20
|
+
import type { FactoryContent } from "../unhydratedFlexTreeFromInsertable.js";
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* Schema for a {@link TreeNode} or {@link TreeLeafValue}.
|
|
@@ -70,48 +72,6 @@ export type TreeNodeSchema<
|
|
|
70
72
|
TCustomMetadata
|
|
71
73
|
>;
|
|
72
74
|
|
|
73
|
-
/**
|
|
74
|
-
* Stores annotations for an individual allowed type.
|
|
75
|
-
* @alpha
|
|
76
|
-
*/
|
|
77
|
-
export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
|
|
78
|
-
/**
|
|
79
|
-
* Annotations for the allowed type.
|
|
80
|
-
*/
|
|
81
|
-
readonly metadata: AllowedTypeMetadata;
|
|
82
|
-
/**
|
|
83
|
-
* The allowed type the annotations apply to in a particular schema.
|
|
84
|
-
*/
|
|
85
|
-
readonly type: T;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Stores annotations for a set of evaluated annotated allowed types.
|
|
90
|
-
* @alpha
|
|
91
|
-
*/
|
|
92
|
-
export interface NormalizedAnnotatedAllowedTypes {
|
|
93
|
-
/**
|
|
94
|
-
* Annotations that apply to a set of allowed types.
|
|
95
|
-
*/
|
|
96
|
-
readonly metadata: AllowedTypesMetadata;
|
|
97
|
-
/**
|
|
98
|
-
* All the evaluated allowed types that the annotations apply to. The types themselves are also individually annotated.
|
|
99
|
-
*/
|
|
100
|
-
readonly types: readonly AnnotatedAllowedType<TreeNodeSchema>[];
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Checks if the input is an {@link AnnotatedAllowedTypes}.
|
|
105
|
-
*/
|
|
106
|
-
export function isAnnotatedAllowedTypes(
|
|
107
|
-
allowedTypes: ImplicitAnnotatedAllowedTypes,
|
|
108
|
-
): allowedTypes is AnnotatedAllowedTypes {
|
|
109
|
-
return (
|
|
110
|
-
// Class based schema, and lazy schema references report type "function": filtering them out with typeof makes narrowing based on members mostly safe
|
|
111
|
-
typeof allowedTypes === "object" && "metadata" in allowedTypes && "types" in allowedTypes
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
75
|
/**
|
|
116
76
|
* Schema which is not a class.
|
|
117
77
|
* @remarks
|
|
@@ -371,6 +331,11 @@ export interface TreeNodeSchemaCore<
|
|
|
371
331
|
createFromInsertable(data: TInsertable): Unhydrated<TreeNode | TreeLeafValue>;
|
|
372
332
|
}
|
|
373
333
|
|
|
334
|
+
/**
|
|
335
|
+
* Symbol for use by {@link TreeNodeSchemaCorePrivate}.
|
|
336
|
+
*/
|
|
337
|
+
export const privateDataSymbol = Symbol("PrivateData");
|
|
338
|
+
|
|
374
339
|
/**
|
|
375
340
|
* {@link TreeNodeSchemaCore} extended with some non-exported APIs.
|
|
376
341
|
*/
|
|
@@ -389,6 +354,56 @@ export interface TreeNodeSchemaCorePrivate<
|
|
|
389
354
|
TInsertable,
|
|
390
355
|
TCustomMetadata
|
|
391
356
|
> {
|
|
357
|
+
/**
|
|
358
|
+
* Package private data provided by all {@link TreeNodeSchema}.
|
|
359
|
+
* @remarks
|
|
360
|
+
* Users can add custom statics to schema classes.
|
|
361
|
+
* To reduce the risk of such statics colliding with properties used to implement the schema,
|
|
362
|
+
* some of the private APIs are grouped together under this symbol.
|
|
363
|
+
*
|
|
364
|
+
* Note that there are still some properties which are not under a symbol and thus expose some risk of name collisions.
|
|
365
|
+
* See {@link TreeNodeValid} for some such properties.
|
|
366
|
+
*/
|
|
367
|
+
readonly [privateDataSymbol]: TreeNodeSchemaPrivateData;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Package private data provided by all {@link TreeNodeSchema}.
|
|
372
|
+
* @remarks
|
|
373
|
+
* This data needs to be available before lazy schema references are resolved.
|
|
374
|
+
* For data which is only available after lazy schema references are resolved,
|
|
375
|
+
* see {@link TreeNodeSchemaInitializedData}, which can be accessed via {@link TreeNodeSchemaPrivateData.idempotentInitialize}.
|
|
376
|
+
*/
|
|
377
|
+
export interface TreeNodeSchemaPrivateData {
|
|
378
|
+
/**
|
|
379
|
+
* All possible annotated allowed types that a field under a node with this schema could have.
|
|
380
|
+
* @remarks
|
|
381
|
+
* In this case "field" includes anything that is a field in the internal (flex-tree) abstraction layer.
|
|
382
|
+
* This includes the content field for arrays, and all the fields for map nodes.
|
|
383
|
+
* If this node does not have fields (and thus is a leaf), the array will be empty.
|
|
384
|
+
*
|
|
385
|
+
* This set cannot be used before the schema in it have been defined:
|
|
386
|
+
* more specifically, when using lazy schema references (for example to make foreword references to schema which have not yet been defined),
|
|
387
|
+
* users must wait until after the schema are defined to access this array.
|
|
388
|
+
*
|
|
389
|
+
* @privateRemarks
|
|
390
|
+
* If this is stabilized, it will live alongside the childTypes property on {@link TreeNodeSchemaCore}.
|
|
391
|
+
* @system
|
|
392
|
+
*/
|
|
393
|
+
readonly childAnnotatedAllowedTypes: readonly ImplicitAnnotatedAllowedTypes[];
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Idempotent initialization function that pre-caches data and can dereference lazy schema references.
|
|
397
|
+
*/
|
|
398
|
+
idempotentInitialize(): TreeNodeSchemaInitializedData;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Additional data about a given schema which is private to this package.
|
|
403
|
+
* @remarks
|
|
404
|
+
* Created by {@link TreeNodeValid.oneTimeSetup} and can involve dereferencing lazy schema references.
|
|
405
|
+
*/
|
|
406
|
+
export interface TreeNodeSchemaInitializedData {
|
|
392
407
|
/**
|
|
393
408
|
* All possible annotated allowed types that a field under a node with this schema could have.
|
|
394
409
|
* @remarks
|
|
@@ -405,27 +420,77 @@ export interface TreeNodeSchemaCorePrivate<
|
|
|
405
420
|
* @system
|
|
406
421
|
*/
|
|
407
422
|
readonly childAnnotatedAllowedTypes: readonly NormalizedAnnotatedAllowedTypes[];
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* A {@link Context} which can be used for unhydrated nodes of this schema.
|
|
426
|
+
*/
|
|
427
|
+
readonly context: Context;
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Checks if data might be schema-compatible.
|
|
431
|
+
*
|
|
432
|
+
* @returns false if `data` is incompatible with `type` based on a cheap/shallow check.
|
|
433
|
+
*
|
|
434
|
+
* 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.
|
|
435
|
+
*/
|
|
436
|
+
shallowCompatibilityTest(data: FactoryContent): CompatibilityLevel;
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Convert data to a {@link FlexContent} representation.
|
|
440
|
+
* @remarks
|
|
441
|
+
* Data must be compatible with the schema according to {@link shallowCompatibilityTest}.
|
|
442
|
+
*
|
|
443
|
+
* TODO: use of `allowedTypes` is for fallbacks (for example NaN -\> null).
|
|
444
|
+
* This behavior should be moved to shallowCompatibilityTest instead.
|
|
445
|
+
*/
|
|
446
|
+
toFlexContent(data: FactoryContent, allowedTypes: ReadonlySet<TreeNodeSchema>): FlexContent;
|
|
408
447
|
}
|
|
409
448
|
|
|
449
|
+
export type FlexContent = [NodeData, Map<FieldKey, UnhydratedFlexTreeField>];
|
|
450
|
+
|
|
410
451
|
/**
|
|
411
|
-
*
|
|
412
|
-
*
|
|
452
|
+
* Indicates a compatibility level for inferring a schema to apply to insertable data.
|
|
413
453
|
* @remarks
|
|
414
|
-
*
|
|
415
|
-
*
|
|
454
|
+
* Each schema allowed at a location in the tree has its compatibility level checked against the data being inserted.
|
|
455
|
+
* The compatibility is considered unambiguous if there is a single schema with a higher compatibility than all others.
|
|
456
|
+
*
|
|
457
|
+
* This approach allows adding new compatible formats as a non breaking change.
|
|
458
|
+
* If the new format was already compatible with some other schema, it can still be added as non-breaking as long as a lower compatibility level is used.
|
|
459
|
+
* For example, support for constructing maps from record like objects was added in Fluid Framework 2.2.
|
|
460
|
+
* This format (an object with fields) was already compatible with Object nodes at compatibility level Normal so the new format support for maps was added at compatibility level Low.
|
|
461
|
+
* This ensures that existing code that was using object literals as insertable content where both objects and maps were allowed will continue to work,
|
|
462
|
+
* assuming the objects are intended as ObjectNodes.
|
|
463
|
+
* However new code can now be written using record like objects to construct maps, as long as the schema does not also allow Object nodes which are compatible with the data in that location.
|
|
464
|
+
*
|
|
465
|
+
* @see {@link ITreeConfigurationOptions.preventAmbiguity} for a related setting which interacts with this in a somewhat complex way.
|
|
416
466
|
*/
|
|
417
|
-
export
|
|
467
|
+
export enum CompatibilityLevel {
|
|
468
|
+
/**
|
|
469
|
+
* Not compatible. Constructor typing indicates incompatibility.
|
|
470
|
+
*/
|
|
471
|
+
None = 0,
|
|
472
|
+
/**
|
|
473
|
+
* Additional compatibility cases added in Fluid Framework 2.2.
|
|
474
|
+
*/
|
|
475
|
+
Low = 1,
|
|
476
|
+
/**
|
|
477
|
+
* Compatible in Fluid Framework 2.0.
|
|
478
|
+
*/
|
|
479
|
+
Normal = 2,
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Downcasts a {@link TreeNodeSchemaCore} to {@link TreeNodeSchemaCorePrivate} and get its {@link TreeNodeSchemaPrivateData}.
|
|
484
|
+
*/
|
|
485
|
+
export function getTreeNodeSchemaPrivateData(
|
|
418
486
|
schema: TreeNodeSchemaCore<string, NodeKind, boolean>,
|
|
419
|
-
):
|
|
487
|
+
): TreeNodeSchemaPrivateData {
|
|
420
488
|
assert(
|
|
421
|
-
|
|
489
|
+
privateDataSymbol in schema,
|
|
422
490
|
0xbc9 /* All implementations of TreeNodeSchemaCore must also implement TreeNodeSchemaCorePrivate */,
|
|
423
491
|
);
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
0xbca /* All implementations of TreeNodeSchemaCore must also implement TreeNodeSchemaCorePrivate */,
|
|
427
|
-
);
|
|
428
|
-
return schema as TreeNodeSchemaCorePrivate;
|
|
492
|
+
const schemaValid = schema as TreeNodeSchemaCorePrivate;
|
|
493
|
+
return schemaValid[privateDataSymbol];
|
|
429
494
|
}
|
|
430
495
|
|
|
431
496
|
/**
|
|
@@ -458,3 +523,122 @@ export enum NodeKind {
|
|
|
458
523
|
*/
|
|
459
524
|
Record = 4,
|
|
460
525
|
}
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Metadata associated with a Node Schema.
|
|
529
|
+
*
|
|
530
|
+
* @remarks Specified via {@link NodeSchemaOptions.metadata}.
|
|
531
|
+
*
|
|
532
|
+
* @sealed
|
|
533
|
+
* @public
|
|
534
|
+
*/
|
|
535
|
+
export interface NodeSchemaMetadata<out TCustomMetadata = unknown> {
|
|
536
|
+
/**
|
|
537
|
+
* User-defined metadata.
|
|
538
|
+
*/
|
|
539
|
+
readonly custom?: TCustomMetadata | undefined;
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* The description of the Node Schema.
|
|
543
|
+
*
|
|
544
|
+
* @remarks
|
|
545
|
+
*
|
|
546
|
+
* If provided, will be used by the system in scenarios where a description of the kind of node is useful.
|
|
547
|
+
* E.g., when converting a Node Schema to {@link https://json-schema.org/ | JSON Schema}, this description will be
|
|
548
|
+
* used as the `description` property.
|
|
549
|
+
*/
|
|
550
|
+
readonly description?: string | undefined;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Returns true if the given schema is a {@link TreeNodeSchemaClass}, or otherwise false if it is a {@link TreeNodeSchemaNonClass}.
|
|
555
|
+
* @internal
|
|
556
|
+
*/
|
|
557
|
+
export function isTreeNodeSchemaClass<
|
|
558
|
+
Name extends string,
|
|
559
|
+
Kind extends NodeKind,
|
|
560
|
+
TNode extends TreeNode | TreeLeafValue,
|
|
561
|
+
TBuild,
|
|
562
|
+
ImplicitlyConstructable extends boolean,
|
|
563
|
+
Info,
|
|
564
|
+
>(
|
|
565
|
+
schema:
|
|
566
|
+
| TreeNodeSchema<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>
|
|
567
|
+
| TreeNodeSchemaClass<Name, Kind, TNode & TreeNode, TBuild, ImplicitlyConstructable, Info>,
|
|
568
|
+
): schema is TreeNodeSchemaClass<
|
|
569
|
+
Name,
|
|
570
|
+
Kind,
|
|
571
|
+
TNode & TreeNode,
|
|
572
|
+
TBuild,
|
|
573
|
+
ImplicitlyConstructable,
|
|
574
|
+
Info
|
|
575
|
+
> {
|
|
576
|
+
return schema.constructor !== undefined;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* Takes in `TreeNodeSchema[]` and returns a TypedNode union.
|
|
581
|
+
* @privateRemarks
|
|
582
|
+
* If a schema is both TreeNodeSchemaClass and TreeNodeSchemaNonClass, prefer TreeNodeSchemaClass since that includes subclasses properly.
|
|
583
|
+
* @public
|
|
584
|
+
*/
|
|
585
|
+
export type NodeFromSchema<T extends TreeNodeSchema> = T extends TreeNodeSchemaClass<
|
|
586
|
+
string,
|
|
587
|
+
NodeKind,
|
|
588
|
+
infer TNode
|
|
589
|
+
>
|
|
590
|
+
? TNode
|
|
591
|
+
: T extends TreeNodeSchemaNonClass<string, NodeKind, infer TNode>
|
|
592
|
+
? TNode
|
|
593
|
+
: never;
|
|
594
|
+
|
|
595
|
+
/**
|
|
596
|
+
* Data which can be used as a node to be inserted.
|
|
597
|
+
* Either an unhydrated node, or content to build a new node.
|
|
598
|
+
*
|
|
599
|
+
* @see {@link Input}
|
|
600
|
+
*
|
|
601
|
+
* @typeparam TSchemaInput - Schema to process.
|
|
602
|
+
* @typeparam T - Do not specify: default value used as implementation detail.
|
|
603
|
+
* @privateRemarks
|
|
604
|
+
* This can't really be fully correct, since TreeNodeSchema's TNode is generally use covariantly but this code uses it contravariantly.
|
|
605
|
+
* That makes this TreeNodeSchema actually invariant with respect to TNode, but doing that would break all `extends TreeNodeSchema` clauses.
|
|
606
|
+
* As is, this works correctly in most realistic use-cases.
|
|
607
|
+
*
|
|
608
|
+
* One special case this makes is if the result of NodeFromSchema contains TreeNode, this must be an under constrained schema, so the result is set to never.
|
|
609
|
+
* Note that applying UnionToIntersection on the result of NodeFromSchema<T> does not work since it breaks booleans.
|
|
610
|
+
*
|
|
611
|
+
* @public
|
|
612
|
+
*/
|
|
613
|
+
export type InsertableTypedNode<
|
|
614
|
+
TSchema extends TreeNodeSchema,
|
|
615
|
+
T = UnionToIntersection<TSchema>,
|
|
616
|
+
> =
|
|
617
|
+
| (T extends TreeNodeSchema<string, NodeKind, TreeNode | TreeLeafValue, never, true>
|
|
618
|
+
? NodeBuilderData<T>
|
|
619
|
+
: never)
|
|
620
|
+
| (T extends TreeNodeSchema
|
|
621
|
+
? Unhydrated<TreeNode extends NodeFromSchema<T> ? never : NodeFromSchema<T>>
|
|
622
|
+
: never);
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* Given a node's schema, return the corresponding object from which the node could be built.
|
|
626
|
+
* @privateRemarks
|
|
627
|
+
* This uses TreeNodeSchemaCore, and thus depends on TreeNodeSchemaCore.createFromInsertable for the typing.
|
|
628
|
+
* This works almost the same as using TreeNodeSchema,
|
|
629
|
+
* except that the more complex typing in TreeNodeSchema case breaks for non-class schema and leaks in `undefined` from optional crete parameters.
|
|
630
|
+
* @system @public
|
|
631
|
+
*/
|
|
632
|
+
export type NodeBuilderData<T extends TreeNodeSchemaCore<string, NodeKind, boolean>> =
|
|
633
|
+
T extends TreeNodeSchemaCore<string, NodeKind, boolean, unknown, infer TBuild>
|
|
634
|
+
? TBuild
|
|
635
|
+
: never;
|
|
636
|
+
|
|
637
|
+
/**
|
|
638
|
+
* Value that may be stored as a leaf node.
|
|
639
|
+
* @remarks
|
|
640
|
+
* Some limitations apply, see the documentation for {@link SchemaStatics.number} and {@link SchemaStatics.string} for those restrictions.
|
|
641
|
+
* @public
|
|
642
|
+
*/
|
|
643
|
+
// eslint-disable-next-line @rushstack/no-new-null
|
|
644
|
+
export type TreeLeafValue = number | string | boolean | IFluidHandle | null;
|
|
@@ -6,23 +6,27 @@
|
|
|
6
6
|
import { assert, fail } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
8
|
|
|
9
|
-
import { type FlexTreeNode, isFlexTreeNode } from "
|
|
9
|
+
import { type FlexTreeNode, isFlexTreeNode } from "../../feature-libraries/index.js";
|
|
10
10
|
|
|
11
|
+
import { markEager } from "./flexList.js";
|
|
12
|
+
import { inPrototypeChain, privateToken, TreeNode } from "./treeNode.js";
|
|
13
|
+
import type { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
|
|
11
14
|
import {
|
|
12
|
-
type TreeNodeSchema,
|
|
13
15
|
NodeKind,
|
|
16
|
+
type TreeNodeSchema,
|
|
17
|
+
type TreeNodeSchemaCore,
|
|
18
|
+
type TreeNodeSchemaInitializedData,
|
|
19
|
+
type TreeNodeSchemaPrivateData,
|
|
20
|
+
} from "./treeNodeSchema.js";
|
|
21
|
+
import {
|
|
22
|
+
getSimpleNodeSchemaFromInnerNode,
|
|
14
23
|
isTreeNode,
|
|
15
24
|
TreeNodeKernel,
|
|
16
|
-
privateToken,
|
|
17
|
-
TreeNode,
|
|
18
|
-
type InternalTreeNode,
|
|
19
|
-
typeSchemaSymbol,
|
|
20
25
|
type InnerNode,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
} from "./
|
|
25
|
-
import { markEager } from "./flexList.js";
|
|
26
|
+
} from "./treeNodeKernel.js";
|
|
27
|
+
import type { InternalTreeNode } from "./types.js";
|
|
28
|
+
import { typeSchemaSymbol } from "./withType.js";
|
|
29
|
+
import type { ImplicitAnnotatedAllowedTypes } from "./allowedTypes.js";
|
|
26
30
|
|
|
27
31
|
/**
|
|
28
32
|
* Class which all {@link TreeNode}s must extend.
|
|
@@ -66,7 +70,9 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
66
70
|
* @remarks
|
|
67
71
|
* It is valid to dereference LazyItem schema references in this function (or anything that runs after it).
|
|
68
72
|
*/
|
|
69
|
-
protected static oneTimeSetup<T>(
|
|
73
|
+
protected static oneTimeSetup<T>(
|
|
74
|
+
this: typeof TreeNodeValid<T>,
|
|
75
|
+
): TreeNodeSchemaInitializedData {
|
|
70
76
|
fail(0xae5 /* Missing oneTimeSetup */);
|
|
71
77
|
}
|
|
72
78
|
|
|
@@ -165,7 +171,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
165
171
|
const cache = this.markMostDerived();
|
|
166
172
|
cache.oneTimeInitialized ??= this.oneTimeSetup();
|
|
167
173
|
// TypeScript fails to narrow the type of `oneTimeInitialized` to `Context` here, so use a cast:
|
|
168
|
-
return cache as MostDerivedData & { oneTimeInitialized:
|
|
174
|
+
return cache as MostDerivedData & { oneTimeInitialized: TreeNodeSchemaInitializedData };
|
|
169
175
|
}
|
|
170
176
|
|
|
171
177
|
public constructor(input: TInput | InternalTreeNode) {
|
|
@@ -190,7 +196,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
190
196
|
// The TreeNodeKernel associates itself the TreeNode (result here, not node) so it can be looked up later via getKernel.
|
|
191
197
|
// If desired this could be put in a non-enumerable symbol property for lookup instead, but that gets messy going through proxies,
|
|
192
198
|
// so just relying on the WeakMap seems like the cleanest approach.
|
|
193
|
-
new TreeNodeKernel(result, schema, node, cache.oneTimeInitialized);
|
|
199
|
+
new TreeNodeKernel(result, schema, node, cache.oneTimeInitialized.context);
|
|
194
200
|
|
|
195
201
|
return result;
|
|
196
202
|
}
|
|
@@ -211,7 +217,45 @@ markEager(TreeNodeValid);
|
|
|
211
217
|
*/
|
|
212
218
|
export interface MostDerivedData {
|
|
213
219
|
readonly constructor: typeof TreeNodeValid & TreeNodeSchema;
|
|
214
|
-
oneTimeInitialized?:
|
|
220
|
+
oneTimeInitialized?: TreeNodeSchemaInitializedData;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Cast `schema` to a {@link TreeNodeValid}, asserting it actually extends it.
|
|
225
|
+
*/
|
|
226
|
+
export function schemaAsTreeNodeValid(
|
|
227
|
+
schema: TreeNodeSchemaCore<string, NodeKind, boolean>,
|
|
228
|
+
): typeof TreeNodeValid & TreeNodeSchema {
|
|
229
|
+
if (!inPrototypeChain(schema, TreeNodeValid)) {
|
|
230
|
+
// Use JSON.stringify to quote and escape identifier string.
|
|
231
|
+
throw new UsageError(
|
|
232
|
+
`Schema for ${JSON.stringify(
|
|
233
|
+
schema.identifier,
|
|
234
|
+
)} does not extend a SchemaFactory generated class. This is invalid.`,
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return schema as typeof TreeNodeValid & TreeNodeSchema;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Provides the {@link TreeNodeSchemaPrivateData} for class based implementations of {@link asTreeNodeSchemaCorePrivate}.
|
|
243
|
+
* @remarks
|
|
244
|
+
* Such schema must extends {@link TreeNodeValid}.
|
|
245
|
+
*/
|
|
246
|
+
export function createTreeNodeSchemaPrivateData(
|
|
247
|
+
schema: TreeNodeSchemaCore<string, NodeKind, boolean>,
|
|
248
|
+
childAnnotatedAllowedTypes: readonly ImplicitAnnotatedAllowedTypes[],
|
|
249
|
+
): TreeNodeSchemaPrivateData {
|
|
250
|
+
const schemaValid = schemaAsTreeNodeValid(schema);
|
|
251
|
+
// Since this closes over the schema, ensure this schema is marked as most derived
|
|
252
|
+
// so if some other subclass is used later, it will error instead of giving inconsistent results.
|
|
253
|
+
schemaValid.markMostDerived();
|
|
254
|
+
|
|
255
|
+
return {
|
|
256
|
+
idempotentInitialize: () => schemaValid.oneTimeInitialize().oneTimeInitialized,
|
|
257
|
+
childAnnotatedAllowedTypes,
|
|
258
|
+
};
|
|
215
259
|
}
|
|
216
260
|
|
|
217
261
|
// #region NodeJS custom inspect for TreeNodes.
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
import { brand, filterIterable, getOrCreate, mapIterable } from "../../util/index.js";
|
|
55
55
|
|
|
56
56
|
import type { Context } from "./context.js";
|
|
57
|
-
import type { ContextualFieldProvider } from "../
|
|
57
|
+
import type { ContextualFieldProvider } from "../fieldSchema.js";
|
|
58
58
|
import type { TreeNode } from "./treeNode.js";
|
|
59
59
|
|
|
60
60
|
interface UnhydratedTreeSequenceFieldEditBuilder
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
|
-
|
|
7
|
+
normalizeAnnotatedAllowedTypes,
|
|
8
8
|
type NormalizedAnnotatedAllowedTypes,
|
|
9
|
-
|
|
10
|
-
} from "./treeNodeSchema.js";
|
|
9
|
+
} from "./allowedTypes.js";
|
|
10
|
+
import { getTreeNodeSchemaPrivateData, type TreeNodeSchema } from "./treeNodeSchema.js";
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Traverses all {@link TreeNodeSchema} schema reachable from `schema`, applying the visitor pattern.
|
|
@@ -23,10 +23,14 @@ export function walkNodeSchema(
|
|
|
23
23
|
|
|
24
24
|
visitedSet.add(schema);
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
// Since walkNodeSchema is used in the implementation of TreeNodeSchemaPrivateData.idempotentInitialize,
|
|
27
|
+
// Avoid depending on it here to avoid circular dependencies for recursive schema.
|
|
28
|
+
// Instead normalize/evaluate the allowed types as needed.
|
|
29
|
+
const annotatedAllowedTypes =
|
|
30
|
+
getTreeNodeSchemaPrivateData(schema).childAnnotatedAllowedTypes;
|
|
27
31
|
|
|
28
32
|
for (const fieldAllowedTypes of annotatedAllowedTypes) {
|
|
29
|
-
walkAllowedTypes(fieldAllowedTypes, visitor, visitedSet);
|
|
33
|
+
walkAllowedTypes(normalizeAnnotatedAllowedTypes(fieldAllowedTypes), visitor, visitedSet);
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
// This visit is done at the end so the traversal order is most inner types first.
|
|
@@ -6,8 +6,15 @@
|
|
|
6
6
|
import { defaultSchemaPolicy } from "../feature-libraries/index.js";
|
|
7
7
|
import { getOrCreate } from "../util/index.js";
|
|
8
8
|
|
|
9
|
-
import {
|
|
10
|
-
|
|
9
|
+
import {
|
|
10
|
+
Context,
|
|
11
|
+
getTreeNodeSchemaPrivateData,
|
|
12
|
+
normalizeAnnotatedAllowedTypes,
|
|
13
|
+
UnhydratedContext,
|
|
14
|
+
type TreeNodeSchema,
|
|
15
|
+
type TreeNodeSchemaInitializedData,
|
|
16
|
+
} from "./core/index.js";
|
|
17
|
+
import { normalizeFieldSchema, type ImplicitFieldSchema } from "./fieldSchema.js";
|
|
11
18
|
import { toStoredSchema } from "./toStoredSchema.js";
|
|
12
19
|
|
|
13
20
|
const contextCache: WeakMap<ImplicitFieldSchema, Context> = new WeakMap();
|
|
@@ -23,3 +30,20 @@ export function getUnhydratedContext(schema: ImplicitFieldSchema): Context {
|
|
|
23
30
|
return new Context(normalized.annotatedAllowedTypesNormalized, flexContext);
|
|
24
31
|
});
|
|
25
32
|
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Utility for creating {@link TreeNodeSchemaInitializedData}.
|
|
36
|
+
*/
|
|
37
|
+
export function getTreeNodeSchemaInitializedData(
|
|
38
|
+
schema: TreeNodeSchema,
|
|
39
|
+
handler: Pick<TreeNodeSchemaInitializedData, "toFlexContent" | "shallowCompatibilityTest">,
|
|
40
|
+
): TreeNodeSchemaInitializedData {
|
|
41
|
+
const data = getTreeNodeSchemaPrivateData(schema);
|
|
42
|
+
return {
|
|
43
|
+
...handler,
|
|
44
|
+
context: getUnhydratedContext(schema),
|
|
45
|
+
childAnnotatedAllowedTypes: data.childAnnotatedAllowedTypes.map(
|
|
46
|
+
normalizeAnnotatedAllowedTypes,
|
|
47
|
+
),
|
|
48
|
+
};
|
|
49
|
+
}
|