import { FieldNode, SelectionSetNode, GraphQLSchema, GraphQLNamedType, GraphQLFieldConfig, GraphQLObjectType, GraphQLInterfaceType, GraphQLInputFieldConfig, GraphQLInputObjectType, GraphQLEnumValueConfig, GraphQLEnumType, GraphQLOutputType, SelectionNode, FragmentDefinitionNode } from 'graphql'; import { SubschemaConfig, Subschema, MergedTypeResolverOptions, MergedTypeResolver } from '@graphql-tools/delegate'; import { IExecutableSchemaDefinition } from '@graphql-tools/schema'; import { TypeSource, Maybe, ExecutionRequest } from '@graphql-tools/utils'; interface MergeTypeCandidate> { type: GraphQLNamedType; subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; } interface MergeFieldConfigCandidate> { fieldConfig: GraphQLFieldConfig; fieldName: string; type: GraphQLObjectType | GraphQLInterfaceType; subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; } interface MergeInputFieldConfigCandidate> { inputFieldConfig: GraphQLInputFieldConfig; fieldName: string; type: GraphQLInputObjectType; subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; } interface MergeEnumValueConfigCandidate> { enumValueConfig: GraphQLEnumValueConfig; enumValue: string; type: GraphQLEnumType; subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; } type MergeTypeFilter> = (mergeTypeCandidates: Array>, typeName: string) => boolean; interface IStitchSchemasOptions> extends Omit, 'typeDefs'> { subschemas?: Array>; typeDefs?: TypeSource; types?: Array; onTypeConflict?: OnTypeConflict; /** * Should directive definitions from all subschemas be collected and included in the stitched schema. * * When false, custom directive definitions are excluded and their usages are stripped from all type * and field AST nodes. * * @default true */ mergeDirectives?: boolean | undefined; mergeTypes?: boolean | Array | MergeTypeFilter; typeMergingOptions?: TypeMergingOptions; subschemaConfigTransforms?: Array>; } type SubschemaConfigTransform> = (subschemaConfig: SubschemaConfig) => SubschemaConfig | Array>; interface TypeMergingOptions> { validationSettings?: ValidationSettings; validationScopes?: Record; typeCandidateMerger?: (candidates: Array>) => MergeTypeCandidate; typeDescriptionsMerger?: (candidates: Array>) => Maybe; fieldConfigMerger?: (candidates: Array>) => GraphQLFieldConfig; inputFieldConfigMerger?: (candidates: Array>) => GraphQLInputFieldConfig; enumValueConfigMerger?: (candidates: Array>) => GraphQLEnumValueConfig; useNonNullableFieldOnConflict?: boolean; } declare enum ValidationLevel { Error = "error", Warn = "warn", Off = "off" } interface ValidationSettings { validationLevel?: ValidationLevel; strictNullComparison?: boolean; proxiableScalars?: Record>; } type OnTypeConflict> = (left: GraphQLNamedType, right: GraphQLNamedType, info?: { left: { subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; }; right: { subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; }; }) => GraphQLNamedType; declare module '@graphql-tools/utils' { interface IFieldResolverOptions { selectionSet?: string | ((node: FieldNode) => SelectionSetNode); } } declare function stitchSchemas = Record>({ subschemas, types, typeDefs, onTypeConflict, mergeTypes, typeMergingOptions, subschemaConfigTransforms, resolvers, inheritResolversFromInterfaces, resolverValidationOptions, updateResolversInPlace, schemaExtensions, ...rest }: IStitchSchemasOptions): GraphQLSchema; declare function createMergedTypeResolver = any>(mergedTypeResolverOptions: MergedTypeResolverOptions, mergedType?: GraphQLOutputType | string): MergedTypeResolver | undefined; declare const forwardArgsToSelectionSet: (selectionSet: string, mapping?: Record) => (field: FieldNode) => SelectionSetNode; declare function isolateComputedFieldsTransformer(subschemaConfig: SubschemaConfig): Array; declare function splitMergedTypeEntryPointsTransformer(subschemaConfig: SubschemaConfig): Array; declare function handleRelaySubschemas(subschemas: SubschemaConfig[], getTypeNameFromId?: (id: string) => string): SubschemaConfig>[]; /** * Creates an executor that uses the schema created by stitching together multiple subschemas. * Not ready for production * Breaking changes can be introduced in the meanwhile * * @experimental * */ declare function createStitchingExecutor(stitchedSchema: GraphQLSchema): (executorRequest: ExecutionRequest) => Promise<{ data: Record; }>; declare function getDefaultFieldConfigMerger(useNonNullableFieldOnConflict?: boolean): >(candidates: Array>) => GraphQLFieldConfig; declare const calculateSelectionScore: (selections: readonly SelectionNode[], fragments: Record) => number; export { type IStitchSchemasOptions, type MergeEnumValueConfigCandidate, type MergeFieldConfigCandidate, type MergeInputFieldConfigCandidate, type MergeTypeCandidate, type MergeTypeFilter, type OnTypeConflict, type SubschemaConfigTransform, type TypeMergingOptions, ValidationLevel, type ValidationSettings, calculateSelectionScore, createMergedTypeResolver, createStitchingExecutor, forwardArgsToSelectionSet, getDefaultFieldConfigMerger, handleRelaySubschemas, isolateComputedFieldsTransformer, splitMergedTypeEntryPointsTransformer, stitchSchemas };