Skip to content

Commit 381f409

Browse files
authored
Merge pull request #11 from marmelab/resolver_map
[RFR] use makeExecutableSchema instead of rootValue
2 parents 7bbe6a5 + cdc750f commit 381f409

File tree

11 files changed

+142
-187
lines changed

11 files changed

+142
-187
lines changed

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,9 @@
6363
"apollo-client": "~1.2.0",
6464
"apollo-test-utils": "~0.3.2",
6565
"babel-plugin-transform-runtime": "~6.23.0",
66-
"body-parser": "~1.17.2",
6766
"express": "~4.15.3",
68-
"graphql": "~0.9.6",
69-
"graphql-server-express": "~1.0.0",
67+
"express-graphql": "^0.6.6",
68+
"graphql": "~0.10.3",
7069
"graphql-tag": "~2.0.0",
7170
"graphql-tools": "~1.1.0",
7271
"inflection": "~1.12.0",

src/jsonGraphqlExpress.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import bodyParser from 'body-parser';
2-
import { graphqlExpress } from 'graphql-server-express';
1+
import graphqlHTTP from 'express-graphql';
2+
import { printSchema } from 'graphql';
3+
const { makeExecutableSchema } = require('graphql-tools');
34
import getSchemaFromData from './introspection/getSchemaFromData';
45
import resolver from './resolver';
56

@@ -47,12 +48,11 @@ import resolver from './resolver';
4748
*
4849
* app.listen(PORT);
4950
*/
50-
export default data => {
51-
return [
52-
bodyParser.json(),
53-
graphqlExpress({
54-
schema: getSchemaFromData(data),
55-
rootValue: resolver(data),
51+
export default data =>
52+
graphqlHTTP({
53+
schema: makeExecutableSchema({
54+
typeDefs: printSchema(getSchemaFromData(data)),
55+
resolvers: resolver(data),
5656
}),
57-
];
58-
};
57+
graphiql: true,
58+
});

src/resolver/create.js renamed to src/resolver/Mutation/create.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default entityData => entity => {
1+
export default entityData => (_, entity) => {
22
const newEntity = {
33
id: entityData[entityData.length - 1].id + 1,
44
...entity,

src/resolver/remove.js renamed to src/resolver/Mutation/remove.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default entityData => ({ id }) => {
1+
export default entityData => (_, { id }) => {
22
const parsedId = parseInt(id, 10); // FIXME fails for non-integer ids
33
const indexOfEntity = entityData.findIndex(e => e.id === parsedId);
44
const removedEntity = entityData[indexOfEntity];

src/resolver/update.js renamed to src/resolver/Mutation/update.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default entityData => ({ id, ...updates }) => {
1+
export default entityData => (_, { id, ...updates }) => {
22
const parsedId = parseInt(id, 10); // FIXME fails for non-integer ids
33
const indexOfEntity = entityData.findIndex(e => e.id === parsedId);
44

src/resolver/all.js renamed to src/resolver/Query/all.js

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
export default entityData => ({
2-
sortField,
3-
sortOrder = 'asc',
4-
page,
5-
perPage = 25,
6-
filter = '{}',
7-
}) => {
1+
export default entityData => (
2+
_,
3+
{ sortField, sortOrder = 'asc', page, perPage = 25, filter = '{}' },
4+
) => {
85
const filters = JSON.parse(filter);
96
let items = [...entityData];
107

src/resolver/meta.js renamed to src/resolver/Query/meta.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default entityData => ({ page, perPage = 25, filter = '{}' }) => {
1+
export default entityData => (_, { page, perPage = 25, filter = '{}' }) => {
22
const filters = JSON.parse(filter);
33
let items = [...entityData];
44

src/resolver/Query/single.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default entityData => (_, { id }) => entityData.find(d => d.id == id);

src/resolver/index.js

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,43 @@
11
import { pluralize, underscore } from 'inflection';
22

3-
import all from './all';
4-
import meta from './meta';
5-
import single from './single';
6-
import create from './create';
7-
import update from './update';
8-
import remove from './remove';
3+
import all from './Query/all';
4+
import meta from './Query/meta';
5+
import single from './Query/single';
6+
import create from './Mutation/create';
7+
import update from './Mutation/update';
8+
import remove from './Mutation/remove';
99
import { getTypeNamesFromData } from '../introspection/getTypesFromData';
1010

11-
const getResolversForEntity = (entityName, data) => {
12-
let entityData = data[underscore(pluralize(entityName))];
11+
const getData = (entityName, data) => data[underscore(pluralize(entityName))];
1312

13+
const getQueryResolvers = (entityName, data) => ({
14+
[`all${pluralize(entityName)}`]: all(data),
15+
[`_all${pluralize(entityName)}Meta`]: meta(data),
16+
[entityName]: single(data),
17+
});
18+
19+
const getMutationResolvers = (entityName, data) => ({
20+
[`create${entityName}`]: create(data),
21+
[`update${entityName}`]: update(data),
22+
[`remove${entityName}`]: remove(data),
23+
});
24+
25+
export default data => {
26+
const typeNames = getTypeNamesFromData(data);
1427
return {
15-
[`all${pluralize(entityName)}`]: all(entityData),
16-
[`_all${pluralize(entityName)}Meta`]: meta(entityData),
17-
[entityName]: single(entityData),
18-
[`create${entityName}`]: create(entityData),
19-
[`update${entityName}`]: update(entityData),
20-
[`remove${entityName}`]: remove(entityData),
28+
Query: typeNames.reduce(
29+
(resolvers, entityName) => ({
30+
...resolvers,
31+
...getQueryResolvers(entityName, getData(entityName, data)),
32+
}),
33+
{},
34+
),
35+
Mutation: typeNames.reduce(
36+
(resolvers, entityName) => ({
37+
...resolvers,
38+
...getMutationResolvers(entityName, getData(entityName, data)),
39+
}),
40+
{},
41+
),
2142
};
2243
};
23-
24-
export default data =>
25-
getTypeNamesFromData(data).reduce(
26-
(resolvers, entityName) => ({
27-
...resolvers,
28-
...getResolversForEntity(entityName, data),
29-
}),
30-
{},
31-
);

src/resolver/single.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)