Skip to content

Commit 122ab44

Browse files
authored
refactor: due changes in graphql-compose@6.0.1 (#7)
BREAKING CHANGE: Using API from graphql-compose@6.0.0
1 parent 5fa9964 commit 122ab44

File tree

10 files changed

+1957
-1764
lines changed

10 files changed

+1957
-1764
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
99
[![Greenkeeper badge](https://badges.greenkeeper.io/graphql-compose/graphql-compose-pagination.svg)](https://greenkeeper.io/)
1010

11-
This is a plugin for [graphql-compose](https://github.com/graphql-compose/graphql-compose) family, which adds to the TypeComposer `pagination` resolver.
11+
This is a plugin for [graphql-compose](https://github.com/graphql-compose/graphql-compose) family, which adds to the ObjectTypeComposer `pagination` resolver.
1212

1313
Live demo: [https://graphql-compose.herokuapp.com/](https://graphql-compose.herokuapp.com/)
1414

package.json

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,33 +26,33 @@
2626
},
2727
"homepage": "https://github.com/graphql-compose/graphql-compose-pagination",
2828
"peerDependencies": {
29-
"graphql-compose": ">=5.0.1 || >=4.0.0 || >=3.0.2"
29+
"graphql-compose": ">=6.0.0"
3030
},
3131
"devDependencies": {
32-
"@babel/cli": "^7.0.0",
33-
"@babel/core": "^7.0.0",
34-
"@babel/plugin-proposal-object-rest-spread": "^7.0.0",
35-
"@babel/plugin-transform-flow-strip-types": "^7.0.0",
36-
"@babel/plugin-transform-runtime": "^7.0.0",
37-
"@babel/preset-env": "^7.0.0",
32+
"@babel/cli": "^7.2.3",
33+
"@babel/core": "^7.3.4",
34+
"@babel/plugin-proposal-object-rest-spread": "^7.3.4",
35+
"@babel/plugin-transform-flow-strip-types": "^7.3.4",
36+
"@babel/plugin-transform-runtime": "^7.3.4",
37+
"@babel/preset-env": "^7.3.4",
3838
"@babel/preset-flow": "^7.0.0",
3939
"babel-core": "^7.0.0-bridge.0",
40-
"babel-eslint": "^9.0.0",
41-
"babel-jest": "^23.4.2",
40+
"babel-eslint": "^10.0.1",
41+
"babel-jest": "^24.5.0",
4242
"cz-conventional-changelog": "^2.1.0",
43-
"eslint": "^5.5.0",
43+
"eslint": "^5.15.2",
4444
"eslint-config-airbnb-base": "^13.1.0",
45-
"eslint-config-prettier": "^3.0.1",
46-
"eslint-plugin-flowtype": "^2.50.0",
47-
"eslint-plugin-import": "^2.14.0",
48-
"eslint-plugin-prettier": "^2.6.2",
49-
"flow-bin": "^0.80.0",
50-
"graphql": "14.0.0",
51-
"graphql-compose": "^5.0.1",
52-
"jest": "^23.5.0",
53-
"prettier": "^1.14.2",
54-
"rimraf": "^2.6.2",
55-
"semantic-release": "^15.9.12"
45+
"eslint-config-prettier": "^4.1.0",
46+
"eslint-plugin-flowtype": "^3.4.2",
47+
"eslint-plugin-import": "^2.16.0",
48+
"eslint-plugin-prettier": "^3.0.1",
49+
"flow-bin": "^0.95.1",
50+
"graphql": "14.1.1",
51+
"graphql-compose": "^6.0.1",
52+
"jest": "^24.5.0",
53+
"prettier": "^1.16.4",
54+
"rimraf": "^2.6.3",
55+
"semantic-release": "^15.13.3"
5656
},
5757
"config": {
5858
"commitizen": {

src/__mocks__/User.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/* @flow */
22
/* eslint-disable no-param-reassign */
33

4-
import { TypeComposer, Resolver, EnumTypeComposer } from 'graphql-compose';
4+
import { schemaComposer } from 'graphql-compose';
55

6-
export const UserTC = TypeComposer.create(`
6+
export const UserTC = schemaComposer.createObjectTC(`
77
type User {
88
id: Int
99
name: String
@@ -93,13 +93,13 @@ function prepareFilterFromArgs(resolveParams = {}) {
9393
return filter;
9494
}
9595

96-
export const findManyResolver = new Resolver({
96+
export const findManyResolver = schemaComposer.createResolver({
9797
name: 'findMany',
9898
kind: 'query',
9999
type: UserTC,
100100
args: {
101101
filter: filterArgConfig,
102-
sort: EnumTypeComposer.create({
102+
sort: schemaComposer.createEnumTC({
103103
name: 'SortUserInput',
104104
values: {
105105
ID_ASC: { value: { id: 1 } },
@@ -132,7 +132,7 @@ export const findManyResolver = new Resolver({
132132
});
133133
UserTC.setResolver('findMany', findManyResolver);
134134

135-
export const countResolver = new Resolver({
135+
export const countResolver = schemaComposer.createResolver({
136136
name: 'count',
137137
kind: 'query',
138138
type: 'Int',

src/__tests__/composeWithPagination-test.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @flow */
22
/* eslint-disable no-param-reassign */
33

4-
import { TypeComposer, schemaComposer } from 'graphql-compose';
4+
import { ObjectTypeComposer, schemaComposer } from 'graphql-compose';
55
import { GraphQLList, graphql } from 'graphql-compose/lib/graphql';
66
import { composeWithPagination } from '../composeWithPagination';
77
import { UserTC } from '../__mocks__/User';
@@ -14,15 +14,15 @@ describe('composeWithRelay', () => {
1414
});
1515

1616
describe('basic checks', () => {
17-
it('should return TypeComposer', () => {
18-
expect(userComposer).toBeInstanceOf(TypeComposer);
17+
it('should return ObjectTypeComposer', () => {
18+
expect(userComposer).toBeInstanceOf(ObjectTypeComposer);
1919
});
2020

21-
it('should throw error if first arg is not TypeComposer', () => {
21+
it('should throw error if first arg is not ObjectTypeComposer', () => {
2222
expect(() => {
2323
const args: any = [123];
2424
composeWithPagination(...args);
25-
}).toThrowError('should provide TypeComposer instance');
25+
}).toThrowError('should provide ObjectTypeComposer instance');
2626
});
2727

2828
it('should throw error if options are empty', () => {
@@ -33,7 +33,7 @@ describe('composeWithRelay', () => {
3333
});
3434

3535
it('should not change `pagination` resolver if exists', () => {
36-
let myTC = TypeComposer.create('type Complex { a: String, b: Int }');
36+
let myTC = schemaComposer.createObjectTC('type Complex { a: String, b: Int }');
3737
myTC.addResolver({
3838
name: 'pagination',
3939
resolve: () => 'mockData',
@@ -46,11 +46,11 @@ describe('composeWithRelay', () => {
4646
});
4747

4848
expect(myTC.getResolver('pagination')).toBeTruthy();
49-
expect(myTC.getResolver('pagination').resolve()).toBe('mockData');
49+
expect(myTC.getResolver('pagination').resolve({})).toBe('mockData');
5050
});
5151

5252
it('should add resolver with user-specified name', () => {
53-
let myTC = TypeComposer.create('type CustomComplex { a: String, b: Int }');
53+
let myTC = schemaComposer.createObjectTC('type CustomComplex { a: String, b: Int }');
5454
myTC.addResolver({
5555
name: 'count',
5656
resolve: () => 1,
@@ -70,7 +70,7 @@ describe('composeWithRelay', () => {
7070
});
7171

7272
it('should add two connection resolvers', () => {
73-
let myTC = TypeComposer.create('type CustomComplex { a: String, b: Int }');
73+
let myTC = schemaComposer.createObjectTC('type CustomComplex { a: String, b: Int }');
7474
myTC.addResolver({
7575
name: 'count',
7676
resolve: () => 1,
@@ -97,7 +97,7 @@ describe('composeWithRelay', () => {
9797
describe('check `pagination` resolver props', () => {
9898
const rsv = userComposer.getResolver('pagination');
9999
const type: any = rsv.getType();
100-
const tc = new TypeComposer(type);
100+
const tc = schemaComposer.createObjectTC(type);
101101

102102
it('should exists', () => {
103103
expect(rsv).toBeTruthy();

src/__tests__/paginationResolver-test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ describe('paginationResolver', () => {
2020
expect(paginationResolver).toBeInstanceOf(Resolver);
2121
});
2222

23-
it('should throw error if first arg is not TypeComposer', () => {
23+
it('should throw error if first arg is not ObjectTypeComposer', () => {
2424
expect(() => {
2525
const args: any = [123];
2626
preparePaginationResolver(...args);
27-
}).toThrowError('should be instance of TypeComposer');
27+
}).toThrowError('should be instance of ObjectTypeComposer');
2828
});
2929

3030
it('should throw error if opts.countResolverName are empty', () => {

src/composeWithPagination.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
/* @flow */
22

3-
import { TypeComposer } from 'graphql-compose';
3+
import { ObjectTypeComposer } from 'graphql-compose';
44
import {
55
preparePaginationResolver,
66
type ComposeWithPaginationOpts,
77
DEFAULT_RESOLVER_NAME,
88
} from './paginationResolver';
99

10-
export function composeWithPagination(
11-
typeComposer: TypeComposer,
10+
export function composeWithPagination<TSource, TContext>(
11+
typeComposer: ObjectTypeComposer<TSource, TContext>,
1212
opts: ComposeWithPaginationOpts
13-
): TypeComposer {
14-
if (!typeComposer || typeComposer.constructor.name !== 'TypeComposer') {
15-
throw new Error('You should provide TypeComposer instance to composeWithPagination method');
13+
): ObjectTypeComposer<TSource, TContext> {
14+
if (!typeComposer || typeComposer.constructor.name !== 'ObjectTypeComposer') {
15+
throw new Error(
16+
'You should provide ObjectTypeComposer instance to composeWithPagination method'
17+
);
1618
}
1719

1820
if (!opts) {

src/paginationResolver.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import type {
55
Resolver,
6-
TypeComposer,
6+
ObjectTypeComposer,
77
ResolveParams, // eslint-disable-line
88
ProjectionType,
99
} from 'graphql-compose';
@@ -50,26 +50,28 @@ export type PaginationInfoType = {|
5050
hasNextPage: boolean,
5151
|};
5252

53-
export function preparePaginationResolver(
54-
tc: TypeComposer,
53+
export function preparePaginationResolver<TSource, TContext>(
54+
tc: ObjectTypeComposer<TSource, TContext>,
5555
opts: ComposeWithPaginationOpts
56-
): Resolver {
57-
if (!tc || tc.constructor.name !== 'TypeComposer') {
58-
throw new Error('First arg for prepareConnectionResolver() should be instance of TypeComposer');
56+
): Resolver<TSource, TContext> {
57+
if (!tc || tc.constructor.name !== 'ObjectTypeComposer') {
58+
throw new Error(
59+
'First arg for prepareConnectionResolver() should be instance of ObjectTypeComposer'
60+
);
5961
}
6062

6163
const resolverName = opts.paginationResolverName || DEFAULT_RESOLVER_NAME;
6264

6365
if (!opts.countResolverName) {
6466
throw new Error(
65-
`TypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
67+
`ObjectTypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
6668
'should have option `opts.countResolverName`.'
6769
);
6870
}
6971
const countResolver = tc.getResolver(opts.countResolverName);
7072
if (!countResolver) {
7173
throw new Error(
72-
`TypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
74+
`ObjectTypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
7375
`should have resolver with name '${opts.countResolverName}' ` +
7476
'due opts.countResolverName.'
7577
);
@@ -78,14 +80,14 @@ export function preparePaginationResolver(
7880

7981
if (!opts.findResolverName) {
8082
throw new Error(
81-
`TypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
83+
`ObjectTypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
8284
'should have option `opts.findResolverName`.'
8385
);
8486
}
8587
const findManyResolver = tc.getResolver(opts.findResolverName);
8688
if (!findManyResolver) {
8789
throw new Error(
88-
`TypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
90+
`ObjectTypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
8991
`should have resolver with name '${opts.findResolverName}' ` +
9092
'due opts.countResolverName.'
9193
);
@@ -106,8 +108,8 @@ export function preparePaginationResolver(
106108
}
107109
}
108110

109-
return new tc.constructor.schemaComposer.Resolver({
110-
type: preparePaginationTC(tc, resolverName),
111+
return tc.schemaComposer.createResolver({
112+
type: preparePaginationTC(tc),
111113
name: resolverName,
112114
kind: 'query',
113115
args: {
@@ -122,14 +124,11 @@ export function preparePaginationResolver(
122124
},
123125
...(additionalArgs: any),
124126
},
125-
// prettier-ignore
126-
resolve: async /* :: <TContext> */(
127-
rp /* : $Shape<PaginationResolveParams<TContext>> */
128-
) => {
127+
resolve: async (rp: $Shape<PaginationResolveParams<TContext>>) => {
129128
let countPromise;
130129
let findManyPromise;
131130
const { projection = {}, args, rawQuery } = rp;
132-
const findManyParams /* : $Shape<ResolveParams<any, TContext>> */ = {
131+
const findManyParams: $Shape<ResolveParams<TSource, TContext, any>> = {
133132
...rp,
134133
};
135134

@@ -142,7 +141,7 @@ export function preparePaginationResolver(
142141
throw new Error('Argument `perPage` should be positive number.');
143142
}
144143

145-
const countParams /* : $Shape<ResolveParams<any, TContext>> */ = {
144+
const countParams: $Shape<ResolveParams<TSource, TContext, any>> = {
146145
...rp,
147146
rawQuery,
148147
args: {
@@ -203,6 +202,6 @@ export function preparePaginationResolver(
203202
};
204203
return result;
205204
});
206-
}
205+
},
207206
});
208207
}

src/types/__tests__/preparePaginationType-test.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/* @flow */
22

3-
import { TypeComposer } from 'graphql-compose';
3+
import { ObjectTypeComposer } from 'graphql-compose';
44
import { GraphQLNonNull, getNamedType, GraphQLInt, GraphQLList } from 'graphql-compose/lib/graphql';
55
import { UserTC } from '../../__mocks__/User';
66
import { preparePaginationTC, preparePaginationInfoTC } from '../preparePaginationType';
77

88
describe('preparePaginationTC()', () => {
9-
it('should return TypeComposer', () => {
10-
expect(preparePaginationTC(UserTC)).toBeInstanceOf(TypeComposer);
9+
it('should return ObjectTypeComposer', () => {
10+
expect(preparePaginationTC(UserTC)).toBeInstanceOf(ObjectTypeComposer);
1111
});
1212

1313
it('should return the same Type object when called again', () => {
@@ -38,7 +38,7 @@ describe('preparePaginationTC()', () => {
3838
});
3939

4040
it('should have field `pageInfo` with GraphQLNonNull(PaginationInfoType)', () => {
41-
const PaginationInfoTC = preparePaginationInfoTC(UserTC.constructor.schemaComposer);
41+
const PaginationInfoTC = preparePaginationInfoTC(UserTC.schemaComposer);
4242
const tc = preparePaginationTC(UserTC);
4343
expect(tc.getFieldType('pageInfo')).toBeInstanceOf(GraphQLNonNull);
4444

@@ -61,7 +61,7 @@ describe('preparePaginationTC()', () => {
6161
expect(connectionType.ofType).toEqual(UserTC.getType());
6262
});
6363

64-
it('should return same type for same Type in TypeComposer', () => {
64+
it('should return same type for same Type in ObjectTypeComposer', () => {
6565
const t1 = preparePaginationTC(UserTC);
6666
const t2 = preparePaginationTC(UserTC);
6767
expect(t1).toEqual(t2);

src/types/preparePaginationType.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
/* @flow */
22
/* eslint-disable arrow-body-style */
33

4-
import { upperFirst, type TypeComposer, type SchemaComposer } from 'graphql-compose';
4+
import { upperFirst, type ObjectTypeComposer, type SchemaComposer } from 'graphql-compose';
55

6-
export function preparePaginationInfoTC(schemaComposer: SchemaComposer<any>): TypeComposer {
7-
return schemaComposer.getOrCreateTC('PaginationInfo', tc => {
6+
export function preparePaginationInfoTC<TContext>(
7+
schemaComposer: SchemaComposer<TContext>
8+
): ObjectTypeComposer<any, TContext> {
9+
return schemaComposer.getOrCreateOTC('PaginationInfo', tc => {
810
tc.setDescription('Information about pagination.');
911
tc.addFields({
1012
currentPage: {
@@ -35,17 +37,19 @@ export function preparePaginationInfoTC(schemaComposer: SchemaComposer<any>): Ty
3537
});
3638
}
3739

38-
export function preparePaginationTC(tc: TypeComposer, resolverName: ?string): TypeComposer {
39-
const schemaComposer = tc.constructor.schemaComposer;
40-
40+
export function preparePaginationTC<TSource, TContext>(
41+
tc: ObjectTypeComposer<TSource, TContext>,
42+
resolverName: ?string
43+
): ObjectTypeComposer<TSource, TContext> {
44+
const schemaComposer = tc.schemaComposer;
4145
const name = `${tc.getTypeName()}${upperFirst(resolverName || 'pagination')}`;
4246
const type = tc.getType();
4347

4448
if (schemaComposer.has(name)) {
45-
return schemaComposer.getTC(name);
49+
return schemaComposer.getOTC(name);
4650
}
4751

48-
const paginationTC = schemaComposer.TypeComposer.create({
52+
const paginationTC = schemaComposer.createObjectTC({
4953
name,
5054
description: 'List of items with pagination.',
5155
fields: {

0 commit comments

Comments
 (0)