Skip to content

Commit 4ced186

Browse files
authored
Merge pull request #18 from marmelab/fix-graphiql
[RFR] Remove transpilation to fix GraphiQL
2 parents c9fea1d + 46aa2b1 commit 4ced186

File tree

12 files changed

+214
-626
lines changed

12 files changed

+214
-626
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ node_modules
33
.nvmrc
44
.nyc_output
55
.coverage-cache
6+
.reify-cache
67
coverage
78
yarn-error.log

Makefile

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
YARN ?= $(shell which yarn)
22
PKG ?= $(if $(YARN),$(YARN),$(shell which npm))
33

4-
.PHONY: build help
4+
.PHONY: help
55

66
help:
77
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
88

99
install: package.json ## Install dependencies
1010
@$(PKG) install
1111

12-
clean: ## Clean up the lib folder for building
13-
@rm -rf lib
14-
15-
build: clean ## Compile ES6 files to JS
16-
./node_modules/.bin/webpack
17-
1812
watch: ## continuously compile ES6 files to JS
1913
NODE_ENV=development ./node_modules/.bin/rollup -c --watch
2014

bin/json-graphql-server.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#!/usr/bin/env node
22

3-
var path = require('path');
4-
var express = require('express');
5-
var JsonGraphqlServer = require('../lib/');
3+
const path = require('path');
4+
const express = require('express');
5+
const JsonGraphqlServer = require('../src/');
66

77
// fixme the build fails without those
88
global.window = false;

package.json

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,29 @@
11
{
22
"name": "json-graphql-server",
3-
"version": "0.7.0",
4-
"main": "lib/index",
3+
"version": "1.0.0",
4+
"main": "src/index",
55
"repository": "git@github.com:marmelab/json-graphql-server.git",
6-
"authors": [
7-
"François Zaninotto",
8-
"Gildas Garcia"
9-
],
10-
"files": [
11-
"*.md",
12-
"lib",
13-
"bin"
14-
],
6+
"authors": ["François Zaninotto", "Gildas Garcia"],
7+
"files": ["*.md", "src", "bin"],
158
"license": "MIT",
169
"scripts": {
17-
"build": "make build",
18-
"clean": "make clean",
1910
"format": "make format",
2011
"precommit": "lint-staged",
21-
"prepublish": "make build",
2212
"test": "make test",
23-
"watch": "make watch",
2413
"watch-test": "make watch-test"
2514
},
2615
"lint-staged": {
27-
"src/**/*.js": [
28-
"eslint --fix",
29-
"git add"
30-
]
16+
"src/**/*.js": ["eslint --fix", "git add"]
3117
},
3218
"devDependencies": {
3319
"@types/jest": "~19.2.4",
3420
"babel-cli": "~6.24.1",
3521
"babel-core": "~6.25.0",
3622
"babel-eslint": "~7.2.3",
3723
"babel-jest": "~20.0.3",
38-
"babel-loader": "^7.1.1",
3924
"babel-plugin-add-module-exports": "^0.2.1",
4025
"babel-plugin-external-helpers": "~6.22.0",
26+
"babel-plugin-transform-runtime": "~6.23.0",
4127
"babel-preset-es2015": "~6.24.1",
4228
"babel-preset-stage-0": "~6.24.1",
4329
"eslint": "~4.2.0",
@@ -57,21 +43,20 @@
5743
"rollup-plugin-node-globals": "~1.1.0",
5844
"rollup-plugin-node-resolve": "~3.0.0",
5945
"rollup-watch": "~4.0.0",
60-
"supertest": "^3.0.0",
61-
"webpack": "~3.2.0"
46+
"supertest": "~3.0.0"
6247
},
6348
"dependencies": {
6449
"apollo-client": "~1.2.0",
6550
"apollo-test-utils": "~0.3.2",
66-
"babel-plugin-transform-runtime": "~6.23.0",
6751
"express": "~4.15.3",
6852
"express-graphql": "~0.6.7",
6953
"graphql": "~0.10.5",
7054
"graphql-tag": "~2.0.0",
7155
"graphql-tools": "~1.1.0",
7256
"graphql-type-json": "~0.1.4",
7357
"inflection": "~1.12.0",
74-
"lodash.merge": "~4.6.0"
58+
"lodash.merge": "~4.6.0",
59+
"reify": "~0.12.0"
7560
},
7661
"bin": {
7762
"json-graphql-server": "bin/json-graphql-server.js"

src/index.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
//export { default as createApolloClient } from './createApolloClient';
2-
//export { default as graphQLClientServer } from './graphQLClientServer';
3-
export { default as jsonGraphqlExpress } from './jsonGraphqlExpress';
2+
require('reify');
3+
4+
//const graphQLClientServer = require('./graphQLClientServer').default;
5+
const jsonGraphqlExpress = require('./jsonGraphqlExpress').default;
6+
7+
module.exports = {
8+
//graphQLClientServer,
9+
jsonGraphqlExpress,
10+
};

src/introspection/getFilterTypesFromData.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,18 @@ const getRangeFiltersFromEntities = entities => {
8989
*/
9090
export default data =>
9191
Object.keys(data).reduce(
92-
(types, key) => ({
93-
...types,
94-
[getTypeFromKey(key)]: new GraphQLInputObjectType({
95-
name: `${getTypeFromKey(key)}Filter`,
96-
fields: {
97-
q: { type: GraphQLString },
98-
...getFieldsFromEntities(data[key], false),
99-
...getRangeFiltersFromEntities(data[key]),
100-
},
92+
(types, key) =>
93+
Object.assign({}, types, {
94+
[getTypeFromKey(key)]: new GraphQLInputObjectType({
95+
name: `${getTypeFromKey(key)}Filter`,
96+
fields: Object.assign(
97+
{
98+
q: { type: GraphQLString },
99+
},
100+
getFieldsFromEntities(data[key], false),
101+
getRangeFiltersFromEntities(data[key]),
102+
),
103+
}),
101104
}),
102-
}),
103105
{},
104106
);

src/introspection/getSchemaFromData.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,13 @@ export default data => {
130130
const nullableTypeFields = Object.keys(
131131
typeFields,
132132
).reduce((f, fieldName) => {
133-
f[fieldName] = {
134-
...typeFields[fieldName],
133+
f[fieldName] = Object.assign({}, typeFields[fieldName], {
135134
type:
136135
fieldName !== 'id' &&
137136
typeFields[fieldName].type instanceof GraphQLNonNull
138137
? typeFields[fieldName].type.ofType
139138
: typeFields[fieldName].type,
140-
};
139+
});
141140
return f;
142141
}, {});
143142
fields[`create${type.name}`] = {

src/resolver/Entity/index.js

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,32 +54,29 @@ import { isRelationshipField } from '../../relationships';
5454
export default (entityName, data) => {
5555
const entityFields = Object.keys(getFieldsFromEntities(data[entityName]));
5656
const manyToOneResolvers = entityFields.filter(isRelationshipField).reduce(
57-
(resolvers, fieldName) => ({
58-
...resolvers,
59-
[getRelatedType(fieldName)]: entity =>
60-
data[getRelatedKey(fieldName)].find(
61-
relatedRecord => relatedRecord.id == entity[fieldName],
62-
),
63-
}),
57+
(resolvers, fieldName) =>
58+
Object.assign({}, resolvers, {
59+
[getRelatedType(fieldName)]: entity =>
60+
data[getRelatedKey(fieldName)].find(
61+
relatedRecord => relatedRecord.id == entity[fieldName],
62+
),
63+
}),
6464
{},
6565
);
6666
const relatedField = getReverseRelatedField(entityName); // 'posts' => 'post_id'
6767
const hasReverseRelationship = entityName =>
6868
getFieldsFromEntities(data[entityName]).hasOwnProperty(relatedField);
6969
const entities = Object.keys(data);
7070
const oneToManyResolvers = entities.filter(hasReverseRelationship).reduce(
71-
(resolvers, entityName) => ({
72-
...resolvers,
73-
[getRelationshipFromKey(entityName)]: entity =>
74-
data[entityName].filter(
75-
record => record[relatedField] == entity.id,
76-
),
77-
}),
71+
(resolvers, entityName) =>
72+
Object.assign({}, resolvers, {
73+
[getRelationshipFromKey(entityName)]: entity =>
74+
data[entityName].filter(
75+
record => record[relatedField] == entity.id,
76+
),
77+
}),
7878
{},
7979
);
8080

81-
return {
82-
...manyToOneResolvers,
83-
...oneToManyResolvers,
84-
};
81+
return Object.assign({}, manyToOneResolvers, oneToManyResolvers);
8582
};

src/resolver/Mutation/create.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
export default (entityData = []) => (_, entity) => {
22
const newId =
33
entityData.length > 0 ? entityData[entityData.length - 1].id + 1 : 0;
4-
const newEntity = {
5-
id: newId,
6-
...entity,
7-
};
4+
const newEntity = Object.assign({ id: newId }, entity);
85

96
entityData.push(newEntity);
107
return newEntity;

src/resolver/Mutation/update.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
export default (entityData = []) => (_, { id, ...updates }) => {
2-
const parsedId = parseInt(id, 10); // FIXME fails for non-integer ids
1+
export default (entityData = []) => (_, params) => {
2+
const parsedId = parseInt(params.id, 10); // FIXME fails for non-integer ids
33
const indexOfEntity = entityData.findIndex(e => e.id === parsedId);
44
if (indexOfEntity !== -1) {
5-
entityData[indexOfEntity] = {
6-
...entityData[indexOfEntity],
7-
...updates,
8-
};
5+
entityData[indexOfEntity] = Object.assign(
6+
{},
7+
entityData[indexOfEntity],
8+
params,
9+
);
910
return entityData[indexOfEntity];
1011
}
1112
};

0 commit comments

Comments
 (0)