@fluidframework/tree 2.43.0-343119 → 2.50.0-345060
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/CHANGELOG.md +189 -0
- package/api-report/tree.alpha.api.md +86 -20
- package/api-report/tree.beta.api.md +10 -3
- package/api-report/tree.legacy.alpha.api.md +9 -2
- package/api-report/tree.legacy.public.api.md +9 -2
- package/api-report/tree.public.api.md +9 -2
- package/dist/alpha.d.ts +10 -0
- package/dist/core/forest/editableForest.d.ts +0 -2
- package/dist/core/forest/editableForest.d.ts.map +1 -1
- package/dist/core/forest/editableForest.js.map +1 -1
- package/dist/core/forest/forest.d.ts +0 -4
- package/dist/core/forest/forest.d.ts.map +1 -1
- package/dist/core/forest/forest.js +0 -4
- package/dist/core/forest/forest.js.map +1 -1
- package/dist/core/rebase/changeRebaser.d.ts +0 -6
- package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
- package/dist/core/rebase/changeRebaser.js.map +1 -1
- package/dist/core/rebase/types.d.ts +0 -2
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +0 -8
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +0 -8
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/schema-view/view.d.ts +0 -2
- package/dist/core/schema-view/view.d.ts.map +1 -1
- package/dist/core/schema-view/view.js.map +1 -1
- package/dist/core/tree/cursor.d.ts +0 -2
- package/dist/core/tree/cursor.d.ts.map +1 -1
- package/dist/core/tree/cursor.js +0 -2
- package/dist/core/tree/cursor.js.map +1 -1
- package/dist/core/tree/delta.d.ts +0 -2
- package/dist/core/tree/delta.d.ts.map +1 -1
- package/dist/core/tree/delta.js.map +1 -1
- package/dist/core/tree/types.d.ts +0 -4
- package/dist/core/tree/types.d.ts.map +1 -1
- package/dist/core/tree/types.js +0 -2
- package/dist/core/tree/types.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +0 -4
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -10
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -3
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js +0 -2
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -10
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +0 -2
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +0 -6
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -12
- package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/dist/feature-libraries/sequence-field/types.d.ts +0 -2
- package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts +2 -6
- package/dist/jsonDomainSchema.d.ts.map +1 -1
- package/dist/jsonDomainSchema.js +2 -2
- package/dist/jsonDomainSchema.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/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +3 -3
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +38 -0
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +116 -9
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +15 -3
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +88 -38
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +1 -1
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +3 -4
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -3
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +4 -4
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/jsonSchema.d.ts +32 -8
- package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/jsonSchema.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +2 -2
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +1 -1
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +97 -3
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +75 -0
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +5 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/schemaFromSimple.js +2 -0
- package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts +1 -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 +3 -0
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +2 -2
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +12 -0
- 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/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +5 -3
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts +3 -3
- package/dist/simple-tree/core/context.d.ts.map +1 -1
- package/dist/simple-tree/core/context.js.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.d.ts +9 -0
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js +12 -1
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +3 -3
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +4 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +73 -2
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js +28 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +3 -3
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +9 -5
- package/dist/simple-tree/core/walkSchema.js.map +1 -1
- package/dist/simple-tree/createContext.js +1 -1
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/getTreeNodeForField.d.ts +1 -1
- package/dist/simple-tree/getTreeNodeForField.d.ts.map +1 -1
- package/dist/simple-tree/getTreeNodeForField.js +3 -3
- package/dist/simple-tree/getTreeNodeForField.js.map +1 -1
- package/dist/simple-tree/index.d.ts +6 -6
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +10 -5
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +2 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +1 -0
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +18 -15
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts +2 -1
- package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/index.js +5 -1
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +7 -3
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +9 -6
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +5 -1
- 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/index.d.ts +7 -0
- package/dist/simple-tree/node-kinds/record/index.d.ts.map +1 -0
- package/dist/simple-tree/node-kinds/record/index.js +13 -0
- package/dist/simple-tree/node-kinds/record/index.js.map +1 -0
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts +39 -0
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -0
- package/dist/simple-tree/node-kinds/record/recordNode.js +234 -0
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -0
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +70 -0
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -0
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.js +30 -0
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -0
- package/dist/simple-tree/schemaTypes.d.ts +13 -27
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +45 -39
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/simpleSchema.d.ts +16 -1
- 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 +2 -0
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +6 -2
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +1 -2
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +56 -32
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/walkFieldSchema.js +1 -1
- package/dist/simple-tree/walkFieldSchema.js.map +1 -1
- package/dist/tableSchema.d.ts +7 -2
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +21 -7
- package/dist/tableSchema.js.map +1 -1
- package/dist/util/brandedMap.d.ts +0 -2
- package/dist/util/brandedMap.d.ts.map +1 -1
- package/dist/util/brandedMap.js.map +1 -1
- package/docs/main/compatibility.md +15 -1
- package/lib/alpha.d.ts +10 -0
- package/lib/core/forest/editableForest.d.ts +0 -2
- package/lib/core/forest/editableForest.d.ts.map +1 -1
- package/lib/core/forest/editableForest.js.map +1 -1
- package/lib/core/forest/forest.d.ts +0 -4
- package/lib/core/forest/forest.d.ts.map +1 -1
- package/lib/core/forest/forest.js +0 -4
- package/lib/core/forest/forest.js.map +1 -1
- package/lib/core/rebase/changeRebaser.d.ts +0 -6
- package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
- package/lib/core/rebase/changeRebaser.js.map +1 -1
- package/lib/core/rebase/types.d.ts +0 -2
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +0 -8
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +0 -8
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/schema-view/view.d.ts +0 -2
- package/lib/core/schema-view/view.d.ts.map +1 -1
- package/lib/core/schema-view/view.js.map +1 -1
- package/lib/core/tree/cursor.d.ts +0 -2
- package/lib/core/tree/cursor.d.ts.map +1 -1
- package/lib/core/tree/cursor.js +0 -2
- package/lib/core/tree/cursor.js.map +1 -1
- package/lib/core/tree/delta.d.ts +0 -2
- package/lib/core/tree/delta.d.ts.map +1 -1
- package/lib/core/tree/delta.js.map +1 -1
- package/lib/core/tree/types.d.ts +0 -4
- package/lib/core/tree/types.d.ts.map +1 -1
- package/lib/core/tree/types.js +0 -2
- package/lib/core/tree/types.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +0 -4
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -10
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -3
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js +0 -2
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -10
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +0 -2
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +0 -6
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -12
- package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
- package/lib/feature-libraries/sequence-field/types.d.ts +0 -2
- package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/types.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts +2 -6
- package/lib/jsonDomainSchema.d.ts.map +1 -1
- package/lib/jsonDomainSchema.js +3 -3
- package/lib/jsonDomainSchema.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/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +4 -4
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +38 -0
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +110 -3
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +15 -3
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +91 -41
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +1 -1
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +2 -3
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -3
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/jsonSchema.d.ts +32 -8
- package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/jsonSchema.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +2 -2
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +1 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +97 -3
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +77 -2
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +5 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/schemaFromSimple.js +2 -0
- package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +5 -5
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts +1 -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 +3 -0
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +4 -4
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +12 -0
- 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/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +6 -4
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts +3 -3
- package/lib/simple-tree/core/context.d.ts.map +1 -1
- package/lib/simple-tree/core/context.js.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.d.ts +9 -0
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js +10 -0
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +3 -3
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +3 -3
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +73 -2
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js +25 -0
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +3 -3
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +9 -5
- package/lib/simple-tree/core/walkSchema.js.map +1 -1
- package/lib/simple-tree/createContext.js +1 -1
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/getTreeNodeForField.d.ts +1 -1
- package/lib/simple-tree/getTreeNodeForField.d.ts.map +1 -1
- package/lib/simple-tree/getTreeNodeForField.js +1 -1
- package/lib/simple-tree/getTreeNodeForField.js.map +1 -1
- package/lib/simple-tree/index.d.ts +6 -6
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +4 -4
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +2 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +2 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +10 -7
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts +2 -1
- package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/index.js +1 -0
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +9 -5
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +11 -8
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +5 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/index.d.ts +7 -0
- package/lib/simple-tree/node-kinds/record/index.d.ts.map +1 -0
- package/lib/simple-tree/node-kinds/record/index.js +7 -0
- package/lib/simple-tree/node-kinds/record/index.js.map +1 -0
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts +39 -0
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -0
- package/lib/simple-tree/node-kinds/record/recordNode.js +232 -0
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -0
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +70 -0
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -0
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.js +26 -0
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -0
- package/lib/simple-tree/schemaTypes.d.ts +13 -27
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +42 -35
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/simpleSchema.d.ts +16 -1
- 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 +2 -0
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +6 -2
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +1 -2
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +58 -34
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/walkFieldSchema.js +1 -1
- package/lib/simple-tree/walkFieldSchema.js.map +1 -1
- package/lib/tableSchema.d.ts +7 -2
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +22 -8
- package/lib/tableSchema.js.map +1 -1
- package/lib/util/brandedMap.d.ts +0 -2
- package/lib/util/brandedMap.d.ts.map +1 -1
- package/lib/util/brandedMap.js.map +1 -1
- package/package.json +36 -24
- package/src/core/forest/editableForest.ts +0 -2
- package/src/core/forest/forest.ts +0 -4
- package/src/core/rebase/changeRebaser.ts +0 -6
- package/src/core/rebase/types.ts +0 -2
- package/src/core/schema-stored/schema.ts +0 -8
- package/src/core/schema-view/view.ts +0 -2
- package/src/core/tree/cursor.ts +0 -2
- package/src/core/tree/delta.ts +0 -2
- package/src/core/tree/types.ts +0 -4
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +0 -4
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +0 -10
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +1 -3
- package/src/feature-libraries/modular-schema/crossFieldQueries.ts +0 -2
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +0 -10
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +0 -8
- package/src/feature-libraries/modular-schema/modularChangeTypes.ts +0 -12
- package/src/feature-libraries/sequence-field/types.ts +0 -2
- package/src/index.ts +10 -0
- package/src/jsonDomainSchema.ts +3 -3
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +8 -5
- package/src/shared-tree/treeAlpha.ts +190 -3
- package/src/simple-tree/api/configuration.ts +131 -45
- package/src/simple-tree/api/customTree.ts +3 -3
- package/src/simple-tree/api/index.ts +6 -3
- package/src/simple-tree/api/jsonSchema.ts +35 -8
- package/src/simple-tree/api/schemaFactory.ts +5 -13
- package/src/simple-tree/api/schemaFactoryAlpha.ts +268 -1
- package/src/simple-tree/api/schemaFactoryRecursive.ts +5 -1
- package/src/simple-tree/api/schemaFromSimple.ts +6 -0
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +16 -7
- package/src/simple-tree/api/treeBeta.ts +2 -2
- package/src/simple-tree/api/treeNodeApi.ts +7 -4
- package/src/simple-tree/api/typesUnsafe.ts +15 -0
- package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +14 -6
- package/src/simple-tree/core/context.ts +3 -3
- package/src/simple-tree/core/getOrCreateNode.ts +14 -0
- package/src/simple-tree/core/index.ts +8 -1
- package/src/simple-tree/core/treeNodeKernel.ts +1 -1
- package/src/simple-tree/core/treeNodeSchema.ts +121 -5
- package/src/simple-tree/core/walkSchema.ts +16 -7
- package/src/simple-tree/createContext.ts +1 -1
- package/src/simple-tree/getTreeNodeForField.ts +3 -1
- package/src/simple-tree/index.ts +20 -5
- package/src/simple-tree/leafNodeSchema.ts +7 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +15 -9
- package/src/simple-tree/node-kinds/index.ts +11 -0
- package/src/simple-tree/node-kinds/map/mapNode.ts +10 -4
- package/src/simple-tree/node-kinds/object/index.ts +5 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +23 -13
- package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +6 -3
- package/src/simple-tree/node-kinds/record/index.ts +14 -0
- package/src/simple-tree/node-kinds/record/recordNode.ts +410 -0
- package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +136 -0
- package/src/simple-tree/schemaTypes.ts +55 -64
- package/src/simple-tree/simpleSchema.ts +19 -1
- package/src/simple-tree/toStoredSchema.ts +6 -2
- package/src/simple-tree/treeNodeValid.ts +1 -1
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +83 -40
- package/src/simple-tree/walkFieldSchema.ts +5 -1
- package/src/tableSchema.ts +27 -8
- package/src/util/brandedMap.ts +0 -2
|
@@ -3,13 +3,19 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
assert,
|
|
8
|
+
debugAssert,
|
|
9
|
+
fail,
|
|
10
|
+
unreachableCase,
|
|
11
|
+
} from "@fluidframework/core-utils/internal";
|
|
7
12
|
import { createIdCompressor } from "@fluidframework/id-compressor/internal";
|
|
8
13
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
9
14
|
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
10
15
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
11
16
|
|
|
12
17
|
import {
|
|
18
|
+
asIndex,
|
|
13
19
|
getKernel,
|
|
14
20
|
type TreeNode,
|
|
15
21
|
type Unhydrated,
|
|
@@ -40,15 +46,20 @@ import {
|
|
|
40
46
|
getIdentifierFromNode,
|
|
41
47
|
unhydratedFlexTreeFromInsertable,
|
|
42
48
|
getOrCreateNodeFromInnerNode,
|
|
49
|
+
getOrCreateNodeFromInnerUnboxedNode,
|
|
50
|
+
getOrCreateInnerNode,
|
|
51
|
+
NodeKind,
|
|
52
|
+
tryGetTreeNodeForField,
|
|
53
|
+
isObjectNodeSchema,
|
|
43
54
|
} from "../simple-tree/index.js";
|
|
44
|
-
import { extractFromOpaque, type JsonCompatible } from "../util/index.js";
|
|
55
|
+
import { brand, extractFromOpaque, type JsonCompatible } from "../util/index.js";
|
|
45
56
|
import {
|
|
46
57
|
FluidClientVersion,
|
|
47
58
|
noopValidator,
|
|
48
59
|
type ICodecOptions,
|
|
49
60
|
type CodecWriteOptions,
|
|
50
61
|
} from "../codec/index.js";
|
|
51
|
-
import type
|
|
62
|
+
import { EmptyKey, type ITreeCursorSynchronous } from "../core/index.js";
|
|
52
63
|
import {
|
|
53
64
|
cursorForMapTreeField,
|
|
54
65
|
defaultSchemaPolicy,
|
|
@@ -60,6 +71,7 @@ import {
|
|
|
60
71
|
type FieldBatchEncodingContext,
|
|
61
72
|
fluidVersionToFieldBatchCodecWriteVersion,
|
|
62
73
|
type LocalNodeIdentifier,
|
|
74
|
+
type FlexTreeSequenceField,
|
|
63
75
|
} from "../feature-libraries/index.js";
|
|
64
76
|
import { independentInitializedView, type ViewContent } from "./independentView.js";
|
|
65
77
|
import { SchematizingSimpleTreeView, ViewSlot } from "./schematizingTreeView.js";
|
|
@@ -343,6 +355,48 @@ export interface TreeAlpha {
|
|
|
343
355
|
* Otherwise, this returns the key of the field that it is under (a `string`).
|
|
344
356
|
*/
|
|
345
357
|
key2(node: TreeNode): string | number | undefined;
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Gets the child of the given node with the given property key if a child exists under that key.
|
|
361
|
+
*
|
|
362
|
+
* @remarks {@link SchemaFactoryObjectOptions.allowUnknownOptionalFields | Unknown optional fields} of Object nodes will not be returned by this method.
|
|
363
|
+
*
|
|
364
|
+
* @param node - The parent node whose child is being requested.
|
|
365
|
+
* @param key - The property key under the node under which the child is being requested.
|
|
366
|
+
* For Object nodes, this is the developer-facing "property key", not the "{@link SimpleObjectFieldSchema.storedKey | stored keys}".
|
|
367
|
+
*
|
|
368
|
+
* @returns The child node or leaf value under the given key, or `undefined` if no such child exists.
|
|
369
|
+
*
|
|
370
|
+
* @see {@link (TreeAlpha:interface).key2}
|
|
371
|
+
* @see {@link (TreeNodeApi:interface).parent}
|
|
372
|
+
*/
|
|
373
|
+
child(node: TreeNode, key: string | number): TreeNode | TreeLeafValue | undefined;
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Gets the children of the provided node, paired with their property keys under the node.
|
|
377
|
+
*
|
|
378
|
+
* @remarks
|
|
379
|
+
* No guarantees are made regarding the order of the children in the returned array.
|
|
380
|
+
*
|
|
381
|
+
* Optional properties of Object nodes with no value are not included in the result.
|
|
382
|
+
*
|
|
383
|
+
* {@link SchemaFactoryObjectOptions.allowUnknownOptionalFields | Unknown optional fields} of Object nodes are not included in the result.
|
|
384
|
+
*
|
|
385
|
+
* @param node - The node whose children are being requested.
|
|
386
|
+
*
|
|
387
|
+
* @returns
|
|
388
|
+
* An array of pairs of the form `[propertyKey, child]`.
|
|
389
|
+
*
|
|
390
|
+
* For Array nodes, the `propertyKey` is the index of the child in the array.
|
|
391
|
+
*
|
|
392
|
+
* For Object nodes, the returned `propertyKey`s are the developer-facing "property keys", not the "{@link SimpleObjectFieldSchema.storedKey | stored keys}".
|
|
393
|
+
*
|
|
394
|
+
* @see {@link (TreeAlpha:interface).key2}
|
|
395
|
+
* @see {@link (TreeNodeApi:interface).parent}
|
|
396
|
+
*/
|
|
397
|
+
children(
|
|
398
|
+
node: TreeNode,
|
|
399
|
+
): Iterable<[propertyKey: string | number, child: TreeNode | TreeLeafValue]>;
|
|
346
400
|
}
|
|
347
401
|
|
|
348
402
|
/**
|
|
@@ -492,6 +546,139 @@ export const TreeAlpha: TreeAlpha = {
|
|
|
492
546
|
const parentSchema = treeNodeApi.schema(parent);
|
|
493
547
|
return getPropertyKeyFromStoredKey(parentSchema, storedKey);
|
|
494
548
|
},
|
|
549
|
+
|
|
550
|
+
child: (
|
|
551
|
+
node: TreeNode,
|
|
552
|
+
propertyKey: string | number,
|
|
553
|
+
): TreeNode | TreeLeafValue | undefined => {
|
|
554
|
+
const flexNode = getOrCreateInnerNode(node);
|
|
555
|
+
debugAssert(
|
|
556
|
+
() => !flexNode.context.isDisposed() || "The provided tree node has been disposed.",
|
|
557
|
+
);
|
|
558
|
+
|
|
559
|
+
const schema = treeNodeApi.schema(node);
|
|
560
|
+
|
|
561
|
+
switch (schema.kind) {
|
|
562
|
+
case NodeKind.Array: {
|
|
563
|
+
const sequence = flexNode.tryGetField(EmptyKey) as FlexTreeSequenceField | undefined;
|
|
564
|
+
|
|
565
|
+
// Empty sequence - cannot have children.
|
|
566
|
+
if (sequence === undefined) {
|
|
567
|
+
return undefined;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
const index =
|
|
571
|
+
typeof propertyKey === "number"
|
|
572
|
+
? propertyKey
|
|
573
|
+
: asIndex(propertyKey, Number.POSITIVE_INFINITY);
|
|
574
|
+
|
|
575
|
+
// If the key is not a valid index, then there is no corresponding child.
|
|
576
|
+
if (index === undefined) {
|
|
577
|
+
return undefined;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
const childFlexTree = sequence.at(index);
|
|
581
|
+
|
|
582
|
+
// No child at the given index.
|
|
583
|
+
if (childFlexTree === undefined) {
|
|
584
|
+
return undefined;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
return getOrCreateNodeFromInnerUnboxedNode(childFlexTree);
|
|
588
|
+
}
|
|
589
|
+
case NodeKind.Map:
|
|
590
|
+
if (typeof propertyKey !== "string") {
|
|
591
|
+
// Map nodes only support string keys.
|
|
592
|
+
return undefined;
|
|
593
|
+
}
|
|
594
|
+
// Fall through
|
|
595
|
+
case NodeKind.Record:
|
|
596
|
+
case NodeKind.Object: {
|
|
597
|
+
let storedKey: string | number = propertyKey;
|
|
598
|
+
if (isObjectNodeSchema(schema)) {
|
|
599
|
+
const fieldSchema = schema.fields.get(String(propertyKey));
|
|
600
|
+
if (fieldSchema === undefined) {
|
|
601
|
+
return undefined;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
storedKey = fieldSchema.storedKey;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
const field = flexNode.tryGetField(brand(String(storedKey)));
|
|
608
|
+
if (field !== undefined) {
|
|
609
|
+
return tryGetTreeNodeForField(field);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
return undefined;
|
|
613
|
+
}
|
|
614
|
+
case NodeKind.Leaf: {
|
|
615
|
+
fail(0xbc3 /* Leaf schema associated with non-leaf tree node. */);
|
|
616
|
+
}
|
|
617
|
+
default: {
|
|
618
|
+
unreachableCase(schema.kind);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
},
|
|
622
|
+
|
|
623
|
+
children(node: TreeNode): [propertyKey: string | number, child: TreeNode | TreeLeafValue][] {
|
|
624
|
+
const flexNode = getOrCreateInnerNode(node);
|
|
625
|
+
debugAssert(
|
|
626
|
+
() => !flexNode.context.isDisposed() || "The provided tree node has been disposed.",
|
|
627
|
+
);
|
|
628
|
+
|
|
629
|
+
const schema = treeNodeApi.schema(node);
|
|
630
|
+
|
|
631
|
+
const result: [string | number, TreeNode | TreeLeafValue][] = [];
|
|
632
|
+
switch (schema.kind) {
|
|
633
|
+
case NodeKind.Array: {
|
|
634
|
+
const sequence = flexNode.tryGetField(EmptyKey) as FlexTreeSequenceField | undefined;
|
|
635
|
+
if (sequence === undefined) {
|
|
636
|
+
break;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
for (let index = 0; index < sequence.length; index++) {
|
|
640
|
+
const childFlexTree = sequence.at(index);
|
|
641
|
+
assert(childFlexTree !== undefined, 0xbc4 /* Sequence child was undefined. */);
|
|
642
|
+
const childTree = getOrCreateNodeFromInnerUnboxedNode(childFlexTree);
|
|
643
|
+
result.push([index, childTree]);
|
|
644
|
+
}
|
|
645
|
+
break;
|
|
646
|
+
}
|
|
647
|
+
case NodeKind.Map:
|
|
648
|
+
case NodeKind.Record: {
|
|
649
|
+
for (const [key, flexField] of flexNode.fields) {
|
|
650
|
+
const childTreeNode = tryGetTreeNodeForField(flexField);
|
|
651
|
+
if (childTreeNode !== undefined) {
|
|
652
|
+
result.push([key, childTreeNode]);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
break;
|
|
656
|
+
}
|
|
657
|
+
case NodeKind.Object: {
|
|
658
|
+
assert(isObjectNodeSchema(schema), 0xbc5 /* Expected object schema. */);
|
|
659
|
+
for (const [propertyKey, fieldSchema] of schema.fields) {
|
|
660
|
+
const storedKey = fieldSchema.storedKey;
|
|
661
|
+
const flexField = flexNode.tryGetField(brand(String(storedKey)));
|
|
662
|
+
if (flexField !== undefined) {
|
|
663
|
+
const childTreeNode = tryGetTreeNodeForField(flexField);
|
|
664
|
+
assert(
|
|
665
|
+
childTreeNode !== undefined,
|
|
666
|
+
0xbc6 /* Expected child tree node for field. */,
|
|
667
|
+
);
|
|
668
|
+
result.push([propertyKey, childTreeNode]);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
break;
|
|
672
|
+
}
|
|
673
|
+
case NodeKind.Leaf: {
|
|
674
|
+
fail(0xbc7 /* Leaf schema associated with non-leaf tree node. */);
|
|
675
|
+
}
|
|
676
|
+
default: {
|
|
677
|
+
unreachableCase(schema.kind);
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
return result;
|
|
681
|
+
},
|
|
495
682
|
};
|
|
496
683
|
|
|
497
684
|
function exportConcise(
|
|
@@ -3,20 +3,36 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
assert,
|
|
8
|
+
debugAssert,
|
|
9
|
+
fail,
|
|
10
|
+
oob,
|
|
11
|
+
unreachableCase,
|
|
12
|
+
} from "@fluidframework/core-utils/internal";
|
|
7
13
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
14
|
|
|
9
15
|
import {
|
|
10
16
|
type FieldSchemaAlpha,
|
|
11
17
|
type ImplicitFieldSchema,
|
|
18
|
+
evaluateLazySchema,
|
|
12
19
|
FieldKind,
|
|
20
|
+
isAnnotatedAllowedType,
|
|
13
21
|
markSchemaMostDerived,
|
|
14
22
|
normalizeFieldSchema,
|
|
15
23
|
} from "../schemaTypes.js";
|
|
16
24
|
import { NodeKind, type TreeNodeSchema } from "../core/index.js";
|
|
17
25
|
import { toStoredSchema } from "../toStoredSchema.js";
|
|
18
|
-
import {
|
|
19
|
-
|
|
26
|
+
import {
|
|
27
|
+
isArrayNodeSchema,
|
|
28
|
+
isMapNodeSchema,
|
|
29
|
+
isObjectNodeSchema,
|
|
30
|
+
isRecordNodeSchema,
|
|
31
|
+
type ArrayNodeSchema,
|
|
32
|
+
type MapNodeSchema,
|
|
33
|
+
type ObjectNodeSchema,
|
|
34
|
+
type RecordNodeSchema,
|
|
35
|
+
} from "../node-kinds/index.js";
|
|
20
36
|
import { getOrCreate } from "../../util/index.js";
|
|
21
37
|
import type { MakeNominal } from "../../util/index.js";
|
|
22
38
|
import { walkFieldSchema } from "../walkFieldSchema.js";
|
|
@@ -159,6 +175,11 @@ export class TreeViewConfiguration<
|
|
|
159
175
|
*/
|
|
160
176
|
public readonly preventAmbiguity: boolean;
|
|
161
177
|
|
|
178
|
+
/**
|
|
179
|
+
* {@link TreeSchema.definitions} but with public types.
|
|
180
|
+
*/
|
|
181
|
+
protected readonly definitionsInternal: ReadonlyMap<string, TreeNodeSchema>;
|
|
182
|
+
|
|
162
183
|
/**
|
|
163
184
|
* Construct a new {@link TreeViewConfiguration}.
|
|
164
185
|
*
|
|
@@ -181,27 +202,38 @@ export class TreeViewConfiguration<
|
|
|
181
202
|
// Ambiguity errors are lower priority to report than invalid schema errors, so collect these in an array and report them all at once.
|
|
182
203
|
const ambiguityErrors: string[] = [];
|
|
183
204
|
|
|
205
|
+
// Eagerly perform this conversion to surface errors sooner.
|
|
206
|
+
// Includes detection of duplicate schema identifiers.
|
|
207
|
+
toStoredSchema(config.schema);
|
|
208
|
+
|
|
209
|
+
const definitions = new Map<string, SimpleNodeSchema & TreeNodeSchema>();
|
|
210
|
+
|
|
184
211
|
walkFieldSchema(config.schema, {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
212
|
+
node: (schema) => {
|
|
213
|
+
// Ensure all reachable schema are marked as most derived.
|
|
214
|
+
// This ensures if multiple schema extending the same schema factory generated class are present (or have had instances of them constructed, or get instances of them constructed in the future),
|
|
215
|
+
// an error is reported.
|
|
216
|
+
markSchemaMostDerived(schema, true);
|
|
217
|
+
|
|
218
|
+
debugAssert(() => !definitions.has(schema.identifier));
|
|
219
|
+
definitions.set(schema.identifier, schema as SimpleNodeSchema & TreeNodeSchema);
|
|
220
|
+
},
|
|
221
|
+
allowedTypes({ types }): void {
|
|
222
|
+
checkUnion(
|
|
223
|
+
types.map((t) => evaluateLazySchema(isAnnotatedAllowedType(t) ? t.type : t)),
|
|
224
|
+
config.preventAmbiguity,
|
|
225
|
+
ambiguityErrors,
|
|
226
|
+
);
|
|
194
227
|
},
|
|
195
228
|
});
|
|
196
229
|
|
|
230
|
+
this.definitionsInternal = definitions;
|
|
231
|
+
|
|
197
232
|
if (ambiguityErrors.length !== 0) {
|
|
198
233
|
// Duplicate errors are common since when two types conflict, both orders error:
|
|
199
234
|
const deduplicated = new Set(ambiguityErrors);
|
|
200
235
|
throw new UsageError(`Ambiguous schema found:\n${[...deduplicated].join("\n")}`);
|
|
201
236
|
}
|
|
202
|
-
|
|
203
|
-
// Eagerly perform this conversion to surface errors sooner.
|
|
204
|
-
toStoredSchema(config.schema);
|
|
205
237
|
}
|
|
206
238
|
}
|
|
207
239
|
|
|
@@ -219,20 +251,17 @@ export class TreeViewConfigurationAlpha<
|
|
|
219
251
|
* {@inheritDoc TreeSchema.root}
|
|
220
252
|
*/
|
|
221
253
|
public readonly root: FieldSchemaAlpha;
|
|
254
|
+
|
|
222
255
|
/**
|
|
223
256
|
* {@inheritDoc TreeSchema.definitions}
|
|
224
257
|
*/
|
|
225
|
-
public
|
|
258
|
+
public get definitions(): ReadonlyMap<string, SimpleNodeSchema & TreeNodeSchema> {
|
|
259
|
+
return this.definitionsInternal as ReadonlyMap<string, SimpleNodeSchema & TreeNodeSchema>;
|
|
260
|
+
}
|
|
226
261
|
|
|
227
262
|
public constructor(props: ITreeViewConfiguration<TSchema>) {
|
|
228
263
|
super(props);
|
|
229
264
|
this.root = normalizeFieldSchema(props.schema);
|
|
230
|
-
const definitions = new Map<string, SimpleNodeSchema & TreeNodeSchema>();
|
|
231
|
-
walkFieldSchema(props.schema, {
|
|
232
|
-
node: (schema) =>
|
|
233
|
-
definitions.set(schema.identifier, schema as SimpleNodeSchema & TreeNodeSchema),
|
|
234
|
-
});
|
|
235
|
-
this.definitions = definitions;
|
|
236
265
|
}
|
|
237
266
|
}
|
|
238
267
|
|
|
@@ -262,14 +291,27 @@ function formatTypes(allowed: Iterable<TreeNodeSchema>): string {
|
|
|
262
291
|
}
|
|
263
292
|
|
|
264
293
|
/**
|
|
265
|
-
*
|
|
294
|
+
* Check if union contents are valid (shallowly).
|
|
295
|
+
*
|
|
296
|
+
* @param union - The union of {@link TreeNodeSchema} to check.
|
|
297
|
+
* @param preventAmbiguity - If true, detect cases documented in {@link ITreeConfigurationOptions.preventAmbiguity}, reporting them to `ambiguityErrors`.
|
|
298
|
+
* @param ambiguityErrors - An array into which this function inserts any ambiguity errors, see {@link ITreeConfigurationOptions.preventAmbiguity}.
|
|
299
|
+
*
|
|
300
|
+
* @remarks
|
|
301
|
+
* Includes checks for non-ambiguity errors as well: such as duplicate schemas in the union.
|
|
302
|
+
* Any non-ambiguity errors are thrown as exceptions: `UsageError`s if causable by incorrect API use, and asserts if violating internal invariants.
|
|
266
303
|
*/
|
|
267
|
-
export function checkUnion(
|
|
304
|
+
export function checkUnion(
|
|
305
|
+
union: Iterable<TreeNodeSchema>,
|
|
306
|
+
preventAmbiguity: boolean,
|
|
307
|
+
ambiguityErrors: string[],
|
|
308
|
+
): void {
|
|
268
309
|
const checked: Set<TreeNodeSchema> = new Set();
|
|
269
|
-
const maps:
|
|
270
|
-
const arrays:
|
|
271
|
-
|
|
310
|
+
const maps: MapNodeSchema[] = [];
|
|
311
|
+
const arrays: ArrayNodeSchema[] = [];
|
|
312
|
+
const records: RecordNodeSchema[] = [];
|
|
272
313
|
const objects: ObjectNodeSchema[] = [];
|
|
314
|
+
|
|
273
315
|
// Map from key to schema using that key
|
|
274
316
|
const allObjectKeys: Map<string, Set<TreeNodeSchema>> = new Map();
|
|
275
317
|
|
|
@@ -279,42 +321,86 @@ export function checkUnion(union: Iterable<TreeNodeSchema>, errors: string[]): v
|
|
|
279
321
|
}
|
|
280
322
|
checked.add(schema);
|
|
281
323
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
324
|
+
switch (schema.kind) {
|
|
325
|
+
case NodeKind.Leaf: {
|
|
326
|
+
// nothing to do
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
case NodeKind.Object: {
|
|
330
|
+
assert(isObjectNodeSchema(schema), "Expected object schema.");
|
|
331
|
+
objects.push(schema);
|
|
332
|
+
for (const key of schema.fields.keys()) {
|
|
333
|
+
getOrCreate(allObjectKeys, key, () => new Set()).add(schema);
|
|
334
|
+
}
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
case NodeKind.Array: {
|
|
338
|
+
assert(isArrayNodeSchema(schema), "Expected array schema.");
|
|
339
|
+
arrays.push(schema);
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
case NodeKind.Map: {
|
|
343
|
+
assert(isMapNodeSchema(schema), "Expected map schema.");
|
|
344
|
+
maps.push(schema);
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
case NodeKind.Record: {
|
|
348
|
+
assert(isRecordNodeSchema(schema), "Expected record schema.");
|
|
349
|
+
records.push(schema);
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
default: {
|
|
353
|
+
unreachableCase(schema.kind);
|
|
288
354
|
}
|
|
289
|
-
} else if (schema.kind === NodeKind.Array) {
|
|
290
|
-
arrays.push(schema);
|
|
291
|
-
} else {
|
|
292
|
-
assert(schema.kind === NodeKind.Map, 0x9e7 /* invalid schema */);
|
|
293
|
-
maps.push(schema);
|
|
294
355
|
}
|
|
295
356
|
}
|
|
296
357
|
|
|
358
|
+
if (!preventAmbiguity) {
|
|
359
|
+
// All remaining checks are for the preventAmbiguity case, so skip them if not enabled.
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
|
|
297
363
|
if (arrays.length > 1) {
|
|
298
|
-
|
|
364
|
+
ambiguityErrors.push(
|
|
299
365
|
`More than one kind of array allowed within union (${formatTypes(arrays)}). This would require type disambiguation which is not supported by arrays during import or export.`,
|
|
300
366
|
);
|
|
301
367
|
}
|
|
302
368
|
|
|
303
369
|
if (maps.length > 1) {
|
|
304
|
-
|
|
370
|
+
ambiguityErrors.push(
|
|
305
371
|
`More than one kind of map allowed within union (${formatTypes(maps)}). This would require type disambiguation which is not supported by maps during import or export.`,
|
|
306
372
|
);
|
|
307
373
|
}
|
|
308
374
|
|
|
375
|
+
if (records.length > 1) {
|
|
376
|
+
ambiguityErrors.push(
|
|
377
|
+
`More than one kind of record allowed within union (${formatTypes(records)}). This would require type disambiguation which is not supported by records during import or export.`,
|
|
378
|
+
);
|
|
379
|
+
}
|
|
380
|
+
|
|
309
381
|
if (maps.length > 0 && arrays.length > 0) {
|
|
310
|
-
|
|
382
|
+
ambiguityErrors.push(
|
|
311
383
|
`Both a map and an array allowed within union (${formatTypes([...arrays, ...maps])}). Both can be implicitly constructed from iterables like arrays, which are ambiguous when the array is empty.`,
|
|
312
384
|
);
|
|
313
385
|
}
|
|
314
386
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
387
|
+
const nodeKindListEntries = [];
|
|
388
|
+
if (objects.length > 0) {
|
|
389
|
+
nodeKindListEntries.push("objects");
|
|
390
|
+
}
|
|
391
|
+
if (maps.length > 0) {
|
|
392
|
+
nodeKindListEntries.push("maps");
|
|
393
|
+
}
|
|
394
|
+
if (records.length > 0) {
|
|
395
|
+
nodeKindListEntries.push("records");
|
|
396
|
+
}
|
|
397
|
+
if (nodeKindListEntries.length > 1) {
|
|
398
|
+
const nodeKindListString =
|
|
399
|
+
nodeKindListEntries.length === 2
|
|
400
|
+
? `${nodeKindListEntries[0] ?? oob()} and ${nodeKindListEntries[1] ?? oob()}`
|
|
401
|
+
: `${nodeKindListEntries.slice(0, -1).join(", ")}, and ${nodeKindListEntries[nodeKindListEntries.length - 1]}`;
|
|
402
|
+
ambiguityErrors.push(
|
|
403
|
+
`A combination of ${nodeKindListString} is allowed within union (${formatTypes([...objects, ...maps, ...records])}). These can be constructed from objects and can be ambiguous.`,
|
|
318
404
|
);
|
|
319
405
|
}
|
|
320
406
|
|
|
@@ -345,7 +431,7 @@ export function checkUnion(union: Iterable<TreeNodeSchema>, errors: string[]): v
|
|
|
345
431
|
// Consider separating unambiguous implicit construction format from constructor arguments at type level, allowing constructor to superset the implicit construction options (ex: optional constant fields).
|
|
346
432
|
// The policy here however must remain at least as conservative as shallowCompatibilityTest in src/simple-tree/unhydratedFlexTreeFromInsertable.ts.
|
|
347
433
|
|
|
348
|
-
|
|
434
|
+
ambiguityErrors.push(
|
|
349
435
|
`The required fields of ${JSON.stringify(schema.identifier)} are insufficient to differentiate it from the following types: ${formatTypes(possiblyAmbiguous)}. For objects to be considered unambiguous, each must have required fields that do not all occur on any other object in the union.`,
|
|
350
436
|
);
|
|
351
437
|
}
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "../../core/index.js";
|
|
23
23
|
import { FieldKinds, valueSchemaAllows } from "../../feature-libraries/index.js";
|
|
24
24
|
import { cloneWithReplacements } from "../../util/index.js";
|
|
25
|
-
import {
|
|
25
|
+
import type { TreeNodeSchema } from "../core/index.js";
|
|
26
26
|
import {
|
|
27
27
|
booleanSchema,
|
|
28
28
|
handleSchema,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
numberSchema,
|
|
31
31
|
stringSchema,
|
|
32
32
|
} from "../leafNodeSchema.js";
|
|
33
|
-
import { isObjectNodeSchema } from "../node-kinds/index.js";
|
|
33
|
+
import { isArrayNodeSchema, isObjectNodeSchema } from "../node-kinds/index.js";
|
|
34
34
|
import type { TreeLeafValue } from "../schemaTypes.js";
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -106,7 +106,7 @@ export function customFromCursor<TChild>(
|
|
|
106
106
|
return reader.value;
|
|
107
107
|
default: {
|
|
108
108
|
assert(reader.value === undefined, 0xa54 /* out of schema: unexpected value */);
|
|
109
|
-
if (nodeSchema
|
|
109
|
+
if (isArrayNodeSchema(nodeSchema)) {
|
|
110
110
|
const fields = inCursorField(reader, EmptyKey, () =>
|
|
111
111
|
mapCursorField(reader, () => childHandler(reader, options, schema)),
|
|
112
112
|
);
|
|
@@ -45,12 +45,12 @@ export {
|
|
|
45
45
|
singletonSchema,
|
|
46
46
|
} from "./schemaCreationUtilities.js";
|
|
47
47
|
export {
|
|
48
|
+
getIdentifierFromNode,
|
|
49
|
+
getPropertyKeyFromStoredKey,
|
|
50
|
+
getStoredKey,
|
|
48
51
|
treeNodeApi,
|
|
49
52
|
type TreeNodeApi,
|
|
50
53
|
tryGetSchema,
|
|
51
|
-
getStoredKey,
|
|
52
|
-
getPropertyKeyFromStoredKey,
|
|
53
|
-
getIdentifierFromNode,
|
|
54
54
|
} from "./treeNodeApi.js";
|
|
55
55
|
export { createFromCursor } from "./create.js";
|
|
56
56
|
export {
|
|
@@ -67,6 +67,8 @@ export {
|
|
|
67
67
|
type JsonTreeSchema,
|
|
68
68
|
type JsonFieldSchema,
|
|
69
69
|
type JsonLeafSchemaType,
|
|
70
|
+
type JsonRecordNodeSchema,
|
|
71
|
+
type JsonStringKeyPatternProperties,
|
|
70
72
|
} from "./jsonSchema.js";
|
|
71
73
|
export type { TreeSchemaEncodingOptions } from "./getJsonSchema.js";
|
|
72
74
|
export { getJsonSchema } from "./getJsonSchema.js";
|
|
@@ -78,6 +80,7 @@ export type {
|
|
|
78
80
|
ArrayNodeCustomizableSchemaUnsafe,
|
|
79
81
|
MapNodeCustomizableSchemaUnsafe,
|
|
80
82
|
System_Unsafe,
|
|
83
|
+
TreeRecordNodeUnsafe,
|
|
81
84
|
} from "./typesUnsafe.js";
|
|
82
85
|
|
|
83
86
|
export {
|
|
@@ -116,6 +116,22 @@ export interface JsonArrayNodeSchema extends JsonNodeSchemaBase<NodeKind.Array,
|
|
|
116
116
|
readonly items: JsonFieldSchema;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Types allowed in map / record nodes.
|
|
121
|
+
*
|
|
122
|
+
* @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
|
|
123
|
+
*
|
|
124
|
+
* @sealed
|
|
125
|
+
* @alpha
|
|
126
|
+
*/
|
|
127
|
+
export interface JsonStringKeyPatternProperties {
|
|
128
|
+
/**
|
|
129
|
+
* This format allows for any string key that can appear in tree schema in a way that is JSON schema compatible,
|
|
130
|
+
* but restricts the value to the specified allowed types of the value to only those specified.
|
|
131
|
+
*/
|
|
132
|
+
"^.*$": JsonFieldSchema;
|
|
133
|
+
}
|
|
134
|
+
|
|
119
135
|
/**
|
|
120
136
|
* JSON Schema for a map node.
|
|
121
137
|
*
|
|
@@ -131,13 +147,23 @@ export interface JsonMapNodeSchema extends JsonNodeSchemaBase<NodeKind.Map, "obj
|
|
|
131
147
|
* Used to control the types of properties that can appear in the "object" representation of the map.
|
|
132
148
|
* @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
|
|
133
149
|
*/
|
|
134
|
-
readonly patternProperties:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
150
|
+
readonly patternProperties: JsonStringKeyPatternProperties;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* JSON Schema for a record node.
|
|
155
|
+
*
|
|
156
|
+
* @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-instance-data-model}.
|
|
157
|
+
*
|
|
158
|
+
* @sealed
|
|
159
|
+
* @alpha
|
|
160
|
+
*/
|
|
161
|
+
export interface JsonRecordNodeSchema extends JsonNodeSchemaBase<NodeKind.Record, "object"> {
|
|
162
|
+
/**
|
|
163
|
+
* Used to control the types of properties that can appear in the "object" representation of the record.
|
|
164
|
+
* @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
|
|
165
|
+
*/
|
|
166
|
+
readonly patternProperties: JsonStringKeyPatternProperties;
|
|
141
167
|
}
|
|
142
168
|
|
|
143
169
|
/**
|
|
@@ -182,7 +208,8 @@ export type JsonNodeSchema =
|
|
|
182
208
|
| JsonLeafNodeSchema
|
|
183
209
|
| JsonMapNodeSchema
|
|
184
210
|
| JsonArrayNodeSchema
|
|
185
|
-
| JsonObjectNodeSchema
|
|
211
|
+
| JsonObjectNodeSchema
|
|
212
|
+
| JsonRecordNodeSchema;
|
|
186
213
|
|
|
187
214
|
/**
|
|
188
215
|
*{@link https://json-schema.org/draft/2020-12/json-schema-core | JSON Schema} representation of a {@link FieldSchema}.
|
|
@@ -776,16 +776,8 @@ export class SchemaFactory<
|
|
|
776
776
|
if (allowedTypes === undefined) {
|
|
777
777
|
const types = nameOrAllowedTypes as (T & TreeNodeSchema) | readonly TreeNodeSchema[];
|
|
778
778
|
const fullName = structuralName("Map", types);
|
|
779
|
-
return this.getStructuralType(
|
|
780
|
-
fullName,
|
|
781
|
-
types,
|
|
782
|
-
() =>
|
|
783
|
-
this.namedMap(
|
|
784
|
-
fullName as TName,
|
|
785
|
-
nameOrAllowedTypes as T,
|
|
786
|
-
false,
|
|
787
|
-
true,
|
|
788
|
-
) as TreeNodeSchema,
|
|
779
|
+
return this.getStructuralType(fullName, types, () =>
|
|
780
|
+
this.namedMap(fullName, nameOrAllowedTypes as T, false, true),
|
|
789
781
|
) as TreeNodeSchemaBoth<
|
|
790
782
|
string,
|
|
791
783
|
NodeKind.Map,
|
|
@@ -796,7 +788,7 @@ export class SchemaFactory<
|
|
|
796
788
|
undefined
|
|
797
789
|
>;
|
|
798
790
|
}
|
|
799
|
-
// To actually have type safety, assign to the type this method should return before implicitly
|
|
791
|
+
// To actually have type safety, assign to the type this method should return before implicitly up-casting when returning.
|
|
800
792
|
const out: TreeNodeSchemaBoth<
|
|
801
793
|
string,
|
|
802
794
|
NodeKind.Map,
|
|
@@ -895,7 +887,7 @@ export class SchemaFactory<
|
|
|
895
887
|
* ```
|
|
896
888
|
* @privateRemarks
|
|
897
889
|
* The name produced at the type level here is not as specific as it could be, however doing type level sorting and escaping is a real mess.
|
|
898
|
-
* There are cases where not having this full type provided will be less than ideal since TypeScript's structural types.
|
|
890
|
+
* There are cases where not having this full type provided will be less than ideal, since TypeScript's structural types will allow assignment between runtime incompatible types at compile time.
|
|
899
891
|
* For example attempts to narrow unions of structural arrays by name won't work.
|
|
900
892
|
* Planned future changes to move to a class based schema system as well as factor function based node construction should mostly avoid these issues,
|
|
901
893
|
* though there may still be some problematic cases even after that work is done.
|
|
@@ -997,7 +989,7 @@ export class SchemaFactory<
|
|
|
997
989
|
* @returns The structural {@link TreeNodeSchema} associated with the given name and types.
|
|
998
990
|
* @throws `UsageError` if a schema structurally named schema with the same name is cached in `structuralTypes` but had different input types.
|
|
999
991
|
*/
|
|
1000
|
-
|
|
992
|
+
protected getStructuralType(
|
|
1001
993
|
fullName: string,
|
|
1002
994
|
types: TreeNodeSchema | readonly TreeNodeSchema[],
|
|
1003
995
|
builder: () => TreeNodeSchema,
|