Skip to content

Commit

Permalink
Merge 38afc9d into 240f5b9
Browse files Browse the repository at this point in the history
  • Loading branch information
trevor-scheer committed Jun 20, 2019
2 parents 240f5b9 + 38afc9d commit 52cf1cb
Showing 1 changed file with 24 additions and 34 deletions.
58 changes: 24 additions & 34 deletions src/stitching/makeRemoteExecutableSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ import {
printSchema,
Kind,
GraphQLResolveInfo,
DocumentNode
DocumentNode,
BuildSchemaOptions
} from 'graphql';
import linkToFetcher, { execute } from './linkToFetcher';
import isEmptyObject from '../isEmptyObject';
Expand All @@ -30,12 +31,13 @@ import resolveParentFromTypename from './resolveFromParentTypename';
import defaultMergedResolver from './defaultMergedResolver';
import { checkResultAndHandleErrors } from './errors';
import { observableToAsyncIterable } from './observableToAsyncIterable';
import { Options as PrintSchemaOptions } from 'graphql/utilities/schemaPrinter';

export type ResolverFn = (
rootValue?: any,
args?: any,
context?: any,
info?: GraphQLResolveInfo,
info?: GraphQLResolveInfo
) => AsyncIterator<any>;

export type Fetcher = (operation: FetcherOperation) => Promise<ExecutionResult>;
Expand All @@ -51,26 +53,28 @@ export default function makeRemoteExecutableSchema({
schema,
link,
fetcher,
createResolver: customCreateResolver = createResolver
createResolver: customCreateResolver = createResolver,
buildSchemaOptions,
printSchemaOptions = { commentDescriptions: true }
}: {
schema: GraphQLSchema | string;
link?: ApolloLink;
fetcher?: Fetcher;
createResolver?: (fetcher: Fetcher) => GraphQLFieldResolver<any, any>
createResolver?: (fetcher: Fetcher) => GraphQLFieldResolver<any, any>;
buildSchemaOptions?: BuildSchemaOptions;
printSchemaOptions?: PrintSchemaOptions;
}): GraphQLSchema {
if (!fetcher && link) {
fetcher = linkToFetcher(link);
}

let typeDefs: string;
const printOptions = { commentDescriptions: true };

if (typeof schema === 'string') {
typeDefs = schema;
schema = buildSchema(typeDefs);
schema = buildSchema(typeDefs, buildSchemaOptions);
} else {
// TODO fix types https://github.com/apollographql/graphql-tools/issues/542
typeDefs = (printSchema as any)(schema, printOptions);
typeDefs = printSchema(schema, printSchemaOptions);
}

// prepare query resolvers
Expand Down Expand Up @@ -98,7 +102,7 @@ export default function makeRemoteExecutableSchema({
const subscriptions = subscriptionType.getFields();
Object.keys(subscriptions).forEach(key => {
subscriptionResolvers[key] = {
subscribe: createSubscriptionResolver(key, link),
subscribe: createSubscriptionResolver(key, link)
};
});
}
Expand All @@ -118,14 +122,11 @@ export default function makeRemoteExecutableSchema({
const typeMap = schema.getTypeMap();
const types = Object.keys(typeMap).map(name => typeMap[name]);
for (const type of types) {
if (
type instanceof GraphQLInterfaceType ||
type instanceof GraphQLUnionType
) {
if (type instanceof GraphQLInterfaceType || type instanceof GraphQLUnionType) {
resolvers[type.name] = {
__resolveType(parent, context, info) {
return resolveParentFromTypename(parent, info.schema);
},
}
};
} else if (type instanceof GraphQLScalarType) {
if (
Expand All @@ -137,11 +138,7 @@ export default function makeRemoteExecutableSchema({
type === GraphQLInt
)
) {
resolvers[type.name] = recreateType(
type,
(name: string) => null,
false,
) as GraphQLScalarType;
resolvers[type.name] = recreateType(type, (name: string) => null, false) as GraphQLScalarType;
}
} else if (
type instanceof GraphQLObjectType &&
Expand All @@ -160,45 +157,38 @@ export default function makeRemoteExecutableSchema({

return makeExecutableSchema({
typeDefs,
resolvers,
resolvers
});
}

export function createResolver(fetcher: Fetcher): GraphQLFieldResolver<any, any> {
return async (root, args, context, info) => {
const fragments = Object.keys(info.fragments).map(
fragment => info.fragments[fragment],
);
const fragments = Object.keys(info.fragments).map(fragment => info.fragments[fragment]);
const document = {
kind: Kind.DOCUMENT,
definitions: [info.operation, ...fragments],
definitions: [info.operation, ...fragments]
};
const result = await fetcher({
query: document,
variables: info.variableValues,
context: { graphqlContext: context },
context: { graphqlContext: context }
});
return checkResultAndHandleErrors(result, info);
};
}

function createSubscriptionResolver(
name: string,
link: ApolloLink,
): ResolverFn {
function createSubscriptionResolver(name: string, link: ApolloLink): ResolverFn {
return (root, args, context, info) => {
const fragments = Object.keys(info.fragments).map(
fragment => info.fragments[fragment],
);
const fragments = Object.keys(info.fragments).map(fragment => info.fragments[fragment]);
const document = {
kind: Kind.DOCUMENT,
definitions: [info.operation, ...fragments],
definitions: [info.operation, ...fragments]
};

const operation = {
query: document,
variables: info.variableValues,
context: { graphqlContext: context },
context: { graphqlContext: context }
};

const observable = execute(link, operation);
Expand Down

0 comments on commit 52cf1cb

Please sign in to comment.