Skip to content

Commit 4741378

Browse files
committed
refactor: due changes in graphql-compose@6.0.1
BREAKING CHANGE: Using API from graphql-compose@6.0.0
1 parent 8a1fec2 commit 4741378

14 files changed

+1981
-1797
lines changed

.markdownlint.json

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"line-length": false,
3+
"no-trailing-punctuation": {
4+
"punctuation": ",;"
5+
},
6+
"no-inline-html": false,
7+
"ol-prefix": false,
8+
"first-line-h1": false,
9+
"first-heading-h1": false
10+
}

.vscode/settings.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"prettier.eslintIntegration": true,
3+
"eslint.validate": [
4+
"javascript",
5+
],
6+
"javascript.validate.enable": false
7+
}

README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,24 @@ Modules `graphql` and `graphql-compose` are in `peerDependencies`, so should be
2424

2525
Example
2626
=======
27-
`TypeComposer` is a [graphql-compose](https://github.com/graphql-compose/graphql-compose) utility, that wraps GraphQL types and provide bunch of useful methods for type manipulation.
27+
`ObjectTypeComposer` is a [graphql-compose](https://github.com/graphql-compose/graphql-compose) utility, that wraps GraphQL types and provide bunch of useful methods for type manipulation.
2828
```js
2929
import composeWithRelay from 'graphql-compose-relay';
30-
import { TypeComposer } from 'graphql-compose';
30+
import { ObjectTypeComposer } from 'graphql-compose';
3131
import { RootQueryType, UserType } from './my-graphq-object-types';
3232

33-
const rootQueryTypeComposer = new TypeComposer(RootQueryType);
34-
const userTypeComposer = new TypeComposer(UserType);
33+
const queryTC = new ObjectTypeComposer(RootQueryType);
34+
const userTC = new ObjectTypeComposer(UserType);
3535

3636
// If passed RootQuery, then will be added only `node` field to this type.
3737
// Via RootQuery.node you may find objects by globally unique ID among all types.
38-
composeWithRelay(rootQueryTypeComposer);
38+
composeWithRelay(queryTC);
3939

4040
// Other types, like User, will be wrapped with middlewares that:
4141
// - add relay's id field. Field will be added or wrapped to return Relay's globally unique ID.
4242
// - for mutations will be added clientMutationId to input and output objects types
4343
// - this type will be added to NodeInterface for resolving via RootQuery.node
44-
composeWithRelay(userTypeComposer);
44+
composeWithRelay(userTC);
4545
```
4646
That's all!
4747

@@ -55,7 +55,7 @@ All this annoying operations is too fatigue to do by hands. So this middleware d
5555

5656
Requirements
5757
============
58-
Method `composeWithRelay` accept `TypeComposer` as input argument. So `TypeComposer` should meet following requirements:
58+
Method `composeWithRelay` accept `ObjectTypeComposer` as input argument. So `ObjectTypeComposer` should meet following requirements:
5959
- has defined `recordIdFn` (function that from object of this type, returns you id for the globalId construction)
6060
- should have `findById` resolver (that will be used by `RootQuery.node`)
6161

package.json

+22-22
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,33 @@
2424
},
2525
"homepage": "https://github.com/graphql-compose/graphql-compose-relay",
2626
"peerDependencies": {
27-
"graphql-compose": ">=5.0.1 || >=4.0.0"
27+
"graphql-compose": ">=6.0.0"
2828
},
2929
"devDependencies": {
30-
"@babel/cli": "^7.0.0",
31-
"@babel/core": "^7.0.0",
32-
"@babel/plugin-proposal-object-rest-spread": "^7.0.0",
33-
"@babel/plugin-transform-flow-strip-types": "^7.0.0",
34-
"@babel/plugin-transform-runtime": "^7.0.0",
35-
"@babel/preset-env": "^7.0.0",
30+
"@babel/cli": "^7.2.3",
31+
"@babel/core": "^7.3.4",
32+
"@babel/plugin-proposal-object-rest-spread": "^7.3.4",
33+
"@babel/plugin-transform-flow-strip-types": "^7.3.4",
34+
"@babel/plugin-transform-runtime": "^7.3.4",
35+
"@babel/preset-env": "^7.3.4",
3636
"@babel/preset-flow": "^7.0.0",
3737
"babel-core": "^7.0.0-bridge.0",
38-
"babel-eslint": "^9.0.0",
39-
"babel-jest": "^23.4.2",
38+
"babel-eslint": "^10.0.1",
39+
"babel-jest": "^24.5.0",
4040
"cz-conventional-changelog": "^2.1.0",
41-
"eslint": "^5.5.0",
41+
"eslint": "^5.15.2",
4242
"eslint-config-airbnb-base": "^13.1.0",
43-
"eslint-config-prettier": "^3.0.1",
44-
"eslint-plugin-flowtype": "^2.50.0",
45-
"eslint-plugin-import": "^2.14.0",
46-
"eslint-plugin-prettier": "^2.6.2",
47-
"flow-bin": "^0.80.0",
48-
"graphql": "14.0.0",
49-
"graphql-compose": "^5.0.1",
50-
"jest": "^23.5.0",
51-
"prettier": "^1.14.2",
52-
"rimraf": "^2.6.2",
53-
"semantic-release": "^15.9.12"
43+
"eslint-config-prettier": "^4.1.0",
44+
"eslint-plugin-flowtype": "^3.4.2",
45+
"eslint-plugin-import": "^2.16.0",
46+
"eslint-plugin-prettier": "^3.0.1",
47+
"flow-bin": "^0.95.1",
48+
"graphql": "14.1.1",
49+
"graphql-compose": "^6.0.1",
50+
"jest": "^24.5.0",
51+
"prettier": "^1.16.4",
52+
"rimraf": "^2.6.3",
53+
"semantic-release": "^15.13.3"
5454
},
5555
"config": {
5656
"commitizen": {
@@ -74,7 +74,7 @@
7474
"flow": "./node_modules/.bin/flow",
7575
"test": "npm run coverage && npm run lint && npm run flow",
7676
"link": "yarn build && yarn link graphql-compose && yarn link",
77-
"unlink": "yarn unlink graphql-compose && yarn add graphql-compose",
77+
"unlink": "rimraf node_modules && yarn install",
7878
"semantic-release": "semantic-release"
7979
}
8080
}

src/__mocks__/rootMutationTypeComposer.js

-10
This file was deleted.

src/__mocks__/rootQueryTypeComposer.js

-10
This file was deleted.

src/__mocks__/userTypeComposer.js renamed to src/__mocks__/userTC.js

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* @flow */
22

3-
import { TypeComposer, Resolver } from 'graphql-compose';
3+
import { schemaComposer } from 'graphql-compose';
44
import {
55
GraphQLString,
66
GraphQLObjectType,
@@ -24,10 +24,10 @@ export const UserType = new GraphQLObjectType({
2424
},
2525
});
2626

27-
export const userTypeComposer = new TypeComposer(UserType);
28-
userTypeComposer.setRecordIdFn(obj => obj.id);
27+
export const userTC = schemaComposer.createObjectTC(UserType);
28+
userTC.setRecordIdFn(obj => obj.id);
2929

30-
export const findByIdResolver = new Resolver({
30+
export const findByIdResolver = schemaComposer.createResolver({
3131
name: 'findById',
3232
kind: 'query',
3333
type: UserType,
@@ -56,9 +56,9 @@ export const findByIdResolver = new Resolver({
5656
return Promise.resolve(null);
5757
},
5858
});
59-
userTypeComposer.setResolver('findById', findByIdResolver);
59+
userTC.setResolver('findById', findByIdResolver);
6060

61-
export const createOneResolver = new Resolver({
61+
export const createOneResolver = schemaComposer.createResolver({
6262
name: 'createOne',
6363
kind: 'mutation',
6464
type: new GraphQLObjectType({
@@ -89,9 +89,9 @@ export const createOneResolver = new Resolver({
8989
});
9090
},
9191
});
92-
userTypeComposer.setResolver('createOne', createOneResolver);
92+
userTC.setResolver('createOne', createOneResolver);
9393

94-
export const manyArgsWithInputResolver = new Resolver({
94+
export const manyArgsWithInputResolver = schemaComposer.createResolver({
9595
name: 'manyArgsWithInput',
9696
kind: 'mutation',
9797
type: new GraphQLObjectType({
@@ -130,9 +130,9 @@ export const manyArgsWithInputResolver = new Resolver({
130130
});
131131
},
132132
});
133-
userTypeComposer.setResolver('manyArgsWithInput', manyArgsWithInputResolver);
133+
userTC.setResolver('manyArgsWithInput', manyArgsWithInputResolver);
134134

135-
export const manyArgsWithoutInputResolver = new Resolver({
135+
export const manyArgsWithoutInputResolver = schemaComposer.createResolver({
136136
name: 'manyArgsWithoutInput',
137137
kind: 'mutation',
138138
type: new GraphQLObjectType({
@@ -160,4 +160,4 @@ export const manyArgsWithoutInputResolver = new Resolver({
160160
});
161161
},
162162
});
163-
userTypeComposer.setResolver('manyArgsWithoutInput', manyArgsWithoutInputResolver);
163+
userTC.setResolver('manyArgsWithoutInput', manyArgsWithoutInputResolver);

src/__tests__/composeWithRelay-test.js

+20-22
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,40 @@
11
/* @flow */
22

3-
import { TypeComposer } from 'graphql-compose';
3+
import { ObjectTypeComposer, schemaComposer } from 'graphql-compose';
44
import {
55
GraphQLInterfaceType,
66
GraphQLSchema,
77
GraphQLNonNull,
88
graphql,
99
} from 'graphql-compose/lib/graphql';
1010
import { composeWithRelay } from '../composeWithRelay';
11-
import { userTypeComposer } from '../__mocks__/userTypeComposer';
12-
import { rootQueryTypeComposer } from '../__mocks__/rootQueryTypeComposer';
13-
import { rootMutationTypeComposer } from '../__mocks__/rootMutationTypeComposer';
11+
import { userTC } from '../__mocks__/userTC';
1412
import { toGlobalId } from '../globalId';
1513

1614
describe('composeWithRelay', () => {
17-
const userComposer = composeWithRelay(userTypeComposer);
18-
const rootQueryComposer = composeWithRelay(rootQueryTypeComposer);
19-
const rootMutationComposer = composeWithRelay(rootMutationTypeComposer);
15+
const userComposer = composeWithRelay(userTC);
16+
const queryTC = composeWithRelay(schemaComposer.Query);
17+
const mutationTC = composeWithRelay(schemaComposer.Mutation);
2018

2119
describe('basic checks', () => {
22-
it('should return TypeComposer', () => {
23-
expect(userComposer).toBeInstanceOf(TypeComposer);
20+
it('should return ObjectTypeComposer', () => {
21+
expect(userComposer).toBeInstanceOf(ObjectTypeComposer);
2422
});
2523

26-
it('should throw error if got a not TypeComposer', () => {
24+
it('should throw error if got a not ObjectTypeComposer', () => {
2725
expect(() => composeWithRelay((123: any))).toThrowError(
28-
'should provide TypeComposer instance'
26+
'should provide ObjectTypeComposer instance'
2927
);
3028
});
3129

32-
it('should throw error if TypeComposer without recordIdFn', () => {
33-
const tc = userTypeComposer.clone('AnotherUserType2');
30+
it('should throw error if ObjectTypeComposer without recordIdFn', () => {
31+
const tc = userTC.clone('AnotherUserType2');
3432
delete tc.gqType._gqcGetRecordIdFn;
3533
expect(() => composeWithRelay(tc)).toThrowError('should have recordIdFn');
3634
});
3735

3836
it('should thow error if typeComposer does not have findById resolver', () => {
39-
const tc = userTypeComposer.clone('AnotherUserType');
37+
const tc = userTC.clone('AnotherUserType');
4038
tc.removeResolver('findById');
4139
expect(() => composeWithRelay(tc)).toThrowError(
4240
"does not have resolver with name 'findById'"
@@ -46,7 +44,7 @@ describe('composeWithRelay', () => {
4644

4745
describe('when pass RootQuery type composer', () => {
4846
it('should add `node` field to RootQuery', () => {
49-
const nodeField: any = rootQueryComposer.getField('node');
47+
const nodeField: any = queryTC.getField('node');
5048
expect(nodeField.type).toBeInstanceOf(GraphQLInterfaceType);
5149
expect(nodeField.type.name).toBe('Node');
5250
});
@@ -64,9 +62,9 @@ describe('composeWithRelay', () => {
6462
});
6563

6664
it('should resolve globalId in `user.id` field', async () => {
67-
rootQueryTypeComposer.setField('user', userTypeComposer.getResolver('findById'));
65+
queryTC.setField('user', userTC.getResolver('findById'));
6866
const schema = new GraphQLSchema({
69-
query: rootQueryTypeComposer.getType(),
67+
query: queryTC.getType(),
7068
});
7169
const query = `{
7270
user(_id: 1) {
@@ -80,9 +78,9 @@ describe('composeWithRelay', () => {
8078
});
8179

8280
it('should resolve globalId in `node.id` field', async () => {
83-
rootQueryTypeComposer.setField('user', userTypeComposer.getResolver('findById'));
81+
queryTC.setField('user', userTC.getResolver('findById'));
8482
const schema = new GraphQLSchema({
85-
query: rootQueryTypeComposer.getType(),
83+
query: queryTC.getType(),
8684
});
8785
const query = `{
8886
node(id: "${toGlobalId('User', 1)}") {
@@ -99,10 +97,10 @@ describe('composeWithRelay', () => {
9997
});
10098

10199
it('should passthru clientMutationId in mutations', async () => {
102-
rootMutationComposer.setField('createUser', userTypeComposer.getResolver('createOne'));
100+
mutationTC.setField('createUser', userTC.getResolver('createOne'));
103101
const schema = new GraphQLSchema({
104-
query: rootQueryTypeComposer.getType(),
105-
mutation: rootMutationComposer.getType(),
102+
query: queryTC.getType(),
103+
mutation: mutationTC.getType(),
106104
});
107105
const query = `mutation {
108106
createUser(input: { name: "Ok", clientMutationId: "123" }) {

src/__tests__/nodeFieldConfig-test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
/* @flow */
22

33
import { GraphQLInterfaceType, GraphQLNonNull } from 'graphql-compose/lib/graphql';
4-
import { findByIdResolver, userTypeComposer } from '../__mocks__/userTypeComposer';
4+
import { findByIdResolver, userTC } from '../__mocks__/userTC';
55
import { toGlobalId } from '../globalId';
66
import { getNodeFieldConfig } from '../nodeFieldConfig';
77

88
describe('nodeFieldConfig', () => {
99
const typeToFindByIdMap = {
1010
User: {
1111
resolver: findByIdResolver,
12-
tc: userTypeComposer,
12+
tc: userTC,
1313
},
1414
};
1515
const config = getNodeFieldConfig(typeToFindByIdMap);

src/__tests__/wrapMutationResolver.js

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
/* @flow */
22

3-
import { TypeComposer, InputTypeComposer } from 'graphql-compose';
3+
import { schemaComposer } from 'graphql-compose';
44
import {
55
GraphQLString,
66
GraphQLID,
77
GraphQLNonNull,
88
getNamedType,
99
} from 'graphql-compose/lib/graphql';
1010
import { composeWithRelay } from '../composeWithRelay';
11-
import { userTypeComposer } from '../__mocks__/userTypeComposer';
11+
import { userTC } from '../__mocks__/userTC';
1212
import { toGlobalId } from '../globalId';
1313

1414
describe('wrapMutationResolver', () => {
15-
composeWithRelay(userTypeComposer);
16-
const fieldConfig: any = userTypeComposer.getResolver('createOne').getFieldConfig();
17-
const fieldConfigManyArgsWithInput: any = userTypeComposer
15+
composeWithRelay(userTC);
16+
const fieldConfig: any = userTC.getResolver('createOne').getFieldConfig();
17+
const fieldConfigManyArgsWithInput: any = userTC
1818
.getResolver('manyArgsWithInput')
1919
.getFieldConfig();
20-
const fieldConfigManyArgsWithoutInput: any = userTypeComposer
20+
const fieldConfigManyArgsWithoutInput: any = userTC
2121
.getResolver('manyArgsWithoutInput')
2222
.getFieldConfig();
2323

2424
describe('args', () => {
2525
it('should add `clientMutationId` field to args.input', () => {
26-
const itc = new InputTypeComposer(fieldConfig.args.input.type);
26+
const itc = schemaComposer.createInputTC(fieldConfig.args.input.type);
2727
expect(itc.hasField('clientMutationId')).toBe(true);
2828
expect(itc.getFieldType('clientMutationId')).toBe(GraphQLString);
2929
});
@@ -40,7 +40,7 @@ describe('wrapMutationResolver', () => {
4040
);
4141

4242
const type: any = getNamedType(fieldConfigManyArgsWithoutInput.args.input.type);
43-
const itc = new InputTypeComposer(type);
43+
const itc = schemaComposer.createInputTC(type);
4444
expect(itc.hasField('sort')).toBe(true);
4545
expect(itc.hasField('limit')).toBe(true);
4646
expect(itc.hasField('clientMutationId')).toBe(true);
@@ -52,7 +52,7 @@ describe('wrapMutationResolver', () => {
5252
);
5353

5454
const type: any = getNamedType(fieldConfigManyArgsWithInput.args.input.type);
55-
const itc = new InputTypeComposer(type);
55+
const itc = schemaComposer.createInputTC(type);
5656
expect(itc.hasField('sort')).toBe(false);
5757
expect(itc.hasField('limit')).toBe(false);
5858
expect(itc.hasField('clientMutationId')).toBe(true);
@@ -61,13 +61,13 @@ describe('wrapMutationResolver', () => {
6161

6262
describe('outputType', () => {
6363
it('should add `clientMutationId` field to payload', () => {
64-
const tc = new TypeComposer(fieldConfig.type);
64+
const tc = schemaComposer.createObjectTC(fieldConfig.type);
6565
expect(tc.hasField('clientMutationId')).toBe(true);
6666
expect(tc.getFieldType('clientMutationId')).toBe(GraphQLString);
6767
});
6868

6969
it('should add `nodeId` field to payload', () => {
70-
const tc = new TypeComposer(fieldConfig.type);
70+
const tc = schemaComposer.createObjectTC(fieldConfig.type);
7171
expect(tc.hasField('nodeId')).toBe(true);
7272
expect(tc.getFieldType('nodeId')).toBe(GraphQLID);
7373
});

0 commit comments

Comments
 (0)