import { GraphQLNamedType, GraphQLSchema, SelectionSetNode, FieldNode, GraphQLFieldConfig, GraphQLObjectType, GraphQLInterfaceType, GraphQLInputFieldConfig, GraphQLInputObjectType } from 'graphql'; import { ITypeDefinitions, TypeMap } from '@graphql-tools/utils'; import { Subschema, SubschemaConfig } from '@graphql-tools/delegate'; import { IExecutableSchemaDefinition } from '@graphql-tools/schema'; export interface MergeTypeCandidate { type: GraphQLNamedType; subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; } export interface MergeFieldConfigCandidate { fieldConfig: GraphQLFieldConfig; fieldName: string; type: GraphQLObjectType | GraphQLInterfaceType; subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; } export interface MergeInputFieldConfigCandidate { inputFieldConfig: GraphQLInputFieldConfig; fieldName: string; type: GraphQLInputObjectType; subschema?: GraphQLSchema | SubschemaConfig; transformedSubschema?: Subschema; } export declare type MergeTypeFilter = (mergeTypeCandidates: Array, typeName: string) => boolean; export interface MergedTypeInfo { typeName: string; targetSubschemas: Map>; uniqueFields: Record; nonUniqueFields: Record>; typeMaps: Map; selectionSets: Map; fieldSelectionSets: Map>; } export interface StitchingInfo { subschemaMap: Map; selectionSetsByField: Record>; dynamicSelectionSetsByField: Record SelectionSetNode>>>; mergedTypes: Record; } export interface IStitchSchemasOptions extends Omit, 'typeDefs'> { subschemas?: Array>; typeDefs?: ITypeDefinitions; types?: Array; onTypeConflict?: OnTypeConflict; mergeDirectives?: boolean; mergeTypes?: boolean | Array | MergeTypeFilter; typeMergingOptions?: TypeMergingOptions; subschemaConfigTransforms?: Array; } export declare type SubschemaConfigTransform = (subschemaConfig: SubschemaConfig) => SubschemaConfig; export interface TypeMergingOptions { typeDescriptionsMerger?: (candidates: Array) => string; fieldConfigMerger?: (candidates: Array) => GraphQLFieldConfig; inputFieldConfigMerger?: (candidates: Array) => GraphQLInputFieldConfig; } export declare 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 { fragment?: string; selectionSet?: string | ((node: FieldNode) => SelectionSetNode); } }