Skip to content
This repository was archived by the owner on Sep 3, 2021. It is now read-only.

Commit 20ed577

Browse files
authored
Merge pull request #99 from michaeldgraham/master
Initial support for #88
2 parents a108561 + 1347c4a commit 20ed577

File tree

2 files changed

+79
-7
lines changed

2 files changed

+79
-7
lines changed

src/augmentSchema.js

+43-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { makeExecutableSchema } from 'graphql-tools';
22
import { neo4jgraphql } from './index';
3-
import { print } from 'graphql';
3+
import { print, parse } from 'graphql';
44

5-
export const makeAugmentedSchema = (typeMap, queryResolvers, mutationResolvers) => {
5+
export const augmentedSchema = (typeMap, queryResolvers, mutationResolvers) => {
66
const augmentedTypeMap = augmentTypeMap(typeMap);
77
const augmentedResolvers = augmentResolvers(queryResolvers, mutationResolvers, augmentedTypeMap);
88
return makeExecutableSchema({
@@ -14,7 +14,47 @@ export const makeAugmentedSchema = (typeMap, queryResolvers, mutationResolvers)
1414
});
1515
}
1616

17-
export const extractAstNodesFromSchema = (schema) => {
17+
export const makeAugmentedExecutableSchema = ({
18+
typeDefs,
19+
resolvers,
20+
logger,
21+
allowUndefinedInResolve,
22+
resolverValidationOptions,
23+
directiveResolvers,
24+
schemaDirectives,
25+
parseOptions,
26+
inheritResolversFromInterfaces
27+
}) => {
28+
const typeMap = extractTypeMapFromTypeDefs(typeDefs);
29+
const augmentedTypeMap = augmentTypeMap(typeMap);
30+
const queryResolvers = resolvers && resolvers.Query ? resolvers.Query : {};
31+
const mutationResolvers = resolvers && resolvers.Mutation ? resolvers.Mutation : {};
32+
const augmentedResolvers = augmentResolvers(queryResolvers, mutationResolvers, augmentedTypeMap);
33+
resolverValidationOptions.requireResolversForResolveType = false;
34+
return makeExecutableSchema({
35+
typeDefs: printTypeMap(augmentedTypeMap),
36+
resolvers: augmentedResolvers,
37+
logger: logger,
38+
allowUndefinedInResolve: allowUndefinedInResolve,
39+
resolverValidationOptions: resolverValidationOptions,
40+
directiveResolvers: directiveResolvers,
41+
schemaDirectives: schemaDirectives,
42+
parseOptions: parseOptions,
43+
inheritResolversFromInterfaces: inheritResolversFromInterfaces
44+
});
45+
}
46+
47+
const extractTypeMapFromTypeDefs = (typeDefs) => {
48+
// TODO: accept alternative typeDefs formats (arr of strings, ast, etc.)
49+
// into a single string for parse, add validatation
50+
const astNodes = parse(typeDefs).definitions;
51+
return astNodes.reduce( (acc, t) => {
52+
acc[t.name.value] = t;
53+
return acc;
54+
}, {});
55+
}
56+
57+
export const extractTypeMapFromSchema = (schema) => {
1858
const typeMap = schema.getTypeMap();
1959
let astNode = {};
2060
return Object.keys(typeMap).reduce( (acc, t) => {

src/index.js

+36-4
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ import {
1616
} from './utils';
1717
import { buildCypherSelection } from './selections';
1818
import {
19-
extractAstNodesFromSchema,
19+
extractTypeMapFromSchema,
2020
extractResolvers,
21-
makeAugmentedSchema
21+
augmentedSchema,
22+
makeAugmentedExecutableSchema
2223
} from './augmentSchema';
2324
import { checkRequestError } from './auth';
2425

@@ -440,8 +441,39 @@ RETURN ${fromVar} {${subQuery}} AS ${fromVar};`;
440441
}
441442

442443
export const augmentSchema = (schema) => {
443-
let typeMap = extractAstNodesFromSchema(schema);
444+
let typeMap = extractTypeMapFromSchema(schema);
444445
let queryResolvers = extractResolvers(schema.getQueryType());
445446
let mutationResolvers = extractResolvers(schema.getMutationType());
446-
return makeAugmentedSchema(typeMap, queryResolvers, mutationResolvers);
447+
return augmentedSchema(typeMap, queryResolvers, mutationResolvers);
448+
}
449+
450+
export const makeAugmentedSchema = ({
451+
schema,
452+
typeDefs,
453+
resolvers,
454+
logger,
455+
allowUndefinedInResolve=false,
456+
resolverValidationOptions={},
457+
directiveResolvers=null,
458+
schemaDirectives=null,
459+
parseOptions={},
460+
inheritResolversFromInterfaces=false
461+
}) => {
462+
if(schema) {
463+
return augmentSchema(schema);
464+
}
465+
if(!typeDefs) throw new Error(
466+
'Must provide typeDefs'
467+
);
468+
return makeAugmentedExecutableSchema({
469+
typeDefs,
470+
resolvers,
471+
logger,
472+
allowUndefinedInResolve,
473+
resolverValidationOptions,
474+
directiveResolvers,
475+
schemaDirectives,
476+
parseOptions,
477+
inheritResolversFromInterfaces
478+
});
447479
}

0 commit comments

Comments
 (0)