import { GraphQLNamedType, GraphQLSchema, SelectionSetNode, DocumentNode, InlineFragmentNode, FieldNode, GraphQLFieldConfig, GraphQLObjectType, GraphQLInterfaceType, GraphQLInputFieldConfig, GraphQLInputObjectType } from 'graphql'; import { ITypeDefinitions, TypeMap } from '@graphql-tools/utils'; import { SubschemaConfig } from '@graphql-tools/delegate'; import { IExecutableSchemaDefinition } from '@graphql-tools/schema'; export interface MergeTypeCandidate { type: GraphQLNamedType; subschema?: GraphQLSchema | SubschemaConfig; transformedSchema?: GraphQLSchema; } export interface MergeFieldConfigCandidate { fieldConfig: GraphQLFieldConfig; fieldName: string; type: GraphQLObjectType | GraphQLInterfaceType; subschema?: GraphQLSchema | SubschemaConfig; transformedSchema?: GraphQLSchema; } export interface MergeInputFieldConfigCandidate { inputFieldConfig: GraphQLInputFieldConfig; fieldName: string; type: GraphQLInputObjectType; subschema?: GraphQLSchema | SubschemaConfig; transformedSchema?: GraphQLSchema; } 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 { transformedSubschemaConfigs: Map; transformedSchemas: Map; fragmentsByField: Record>; selectionSetsByField: Record>; dynamicSelectionSetsByField: Record SelectionSetNode>>>; mergedTypes: Record; } export declare type SchemaLikeObject = SubschemaConfig | GraphQLSchema | string | DocumentNode | Array; export interface IStitchSchemasOptions extends Omit, 'typeDefs'> { subschemas?: Array>; typeDefs?: ITypeDefinitions; types?: Array; schemas?: 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: { schema?: GraphQLSchema | SubschemaConfig; }; right: { schema?: GraphQLSchema | SubschemaConfig; }; }) => GraphQLNamedType; declare module '@graphql-tools/utils' { interface IFieldResolverOptions { fragment?: string; selectionSet?: string | ((node: FieldNode) => SelectionSetNode); } }