Skip to content

Commit 7863d44

Browse files
committed
feat: add support for schemaComposer, fix flowtype errors
BREAKING CHANGE: required min version of [email protected]
1 parent d2d9be6 commit 7863d44

File tree

2 files changed

+32
-26
lines changed

2 files changed

+32
-26
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
},
2525
"homepage": "https://github.com/graphql-compose/graphql-compose-pagination",
2626
"peerDependencies": {
27-
"graphql-compose": ">=2.9.5 || >=3.0.0"
27+
"graphql-compose": ">=3.0.0"
2828
},
2929
"devDependencies": {
3030
"babel-cli": "^6.26.0",

src/paginationResolver.js

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
/* @flow */
22
/* eslint-disable no-param-reassign, no-use-before-define */
33

4-
import { Resolver, TypeComposer } from 'graphql-compose';
5-
import type { ResolveParams, ProjectionType } from 'graphql-compose';
4+
import type {
5+
Resolver,
6+
TypeComposer,
7+
ResolveParams, // eslint-disable-line
8+
ProjectionType,
9+
} from 'graphql-compose';
610
import type { GraphQLResolveInfo } from 'graphql-compose/lib/graphql';
711
import type { ComposeWithPaginationOpts } from './composeWithPagination';
812
import preparePaginationType from './types/paginationType';
913

1014
const DEFAULT_PER_PAGE = 20;
1115

12-
export type PaginationResolveParams<TSource, TContext> = {
13-
source: TSource,
16+
export type PaginationResolveParams<TContext> = {
17+
source: any,
1418
args: {
1519
page?: ?number,
1620
perPage?: ?number,
@@ -39,24 +43,24 @@ export type PaginationInfoType = {|
3943
hasNextPage: boolean,
4044
|};
4145

42-
export function preparePaginationResolver<TSource, TContext>(
43-
typeComposer: TypeComposer,
46+
export function preparePaginationResolver(
47+
tc: TypeComposer,
4448
opts: ComposeWithPaginationOpts
4549
): Resolver {
46-
if (!typeComposer || typeComposer.constructor.name !== 'TypeComposer') {
50+
if (!tc || tc.constructor.name !== 'TypeComposer') {
4751
throw new Error('First arg for prepareConnectionResolver() should be instance of TypeComposer');
4852
}
4953

5054
if (!opts.countResolverName) {
5155
throw new Error(
52-
`TypeComposer(${typeComposer.getTypeName()}) provided to composeWithConnection ` +
56+
`TypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
5357
'should have option `opts.countResolverName`.'
5458
);
5559
}
56-
const countResolver = typeComposer.getResolver(opts.countResolverName);
60+
const countResolver = tc.getResolver(opts.countResolverName);
5761
if (!countResolver) {
5862
throw new Error(
59-
`TypeComposer(${typeComposer.getTypeName()}) provided to composeWithConnection ` +
63+
`TypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
6064
`should have resolver with name '${opts.countResolverName}' ` +
6165
'due opts.countResolverName.'
6266
);
@@ -65,14 +69,14 @@ export function preparePaginationResolver<TSource, TContext>(
6569

6670
if (!opts.findResolverName) {
6771
throw new Error(
68-
`TypeComposer(${typeComposer.getTypeName()}) provided to composeWithConnection ` +
72+
`TypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
6973
'should have option `opts.findResolverName`.'
7074
);
7175
}
72-
const findManyResolver = typeComposer.getResolver(opts.findResolverName);
76+
const findManyResolver = tc.getResolver(opts.findResolverName);
7377
if (!findManyResolver) {
7478
throw new Error(
75-
`TypeComposer(${typeComposer.getTypeName()}) provided to composeWithConnection ` +
79+
`TypeComposer(${tc.getTypeName()}) provided to composeWithConnection ` +
7680
`should have resolver with name '${opts.findResolverName}' ` +
7781
'due opts.countResolverName.'
7882
);
@@ -93,8 +97,8 @@ export function preparePaginationResolver<TSource, TContext>(
9397
}
9498
}
9599

96-
return new Resolver({
97-
type: preparePaginationType(typeComposer),
100+
return new tc.constructor.schemaComposer.Resolver({
101+
type: preparePaginationType(tc),
98102
name: 'pagination',
99103
kind: 'query',
100104
args: {
@@ -110,12 +114,14 @@ export function preparePaginationResolver<TSource, TContext>(
110114
...(additionalArgs: any),
111115
},
112116
// eslint-disable-next-line
113-
resolve: async (resolveParams: $Shape<PaginationResolveParams<TSource, TContext>>) => {
117+
resolve: async /* :: <TContext> */(
118+
rp /* : $Shape<PaginationResolveParams<TContext>> */
119+
) => {
114120
let countPromise;
115121
let findManyPromise;
116-
const { projection = {}, args, rawQuery } = resolveParams;
117-
const findManyParams: $Shape<ResolveParams<TSource, TContext>> = {
118-
...resolveParams,
122+
const { projection = {}, args, rawQuery } = rp;
123+
const findManyParams /* : $Shape<ResolveParams<any, TContext>> */ = {
124+
...rp,
119125
};
120126

121127
const page = parseInt(args.page, 10) || 1;
@@ -127,11 +133,11 @@ export function preparePaginationResolver<TSource, TContext>(
127133
throw new Error('Argument `perPage` should be positive number.');
128134
}
129135

130-
const countParams: $Shape<ResolveParams<TSource, TContext>> = {
131-
...resolveParams,
136+
const countParams /* : $Shape<ResolveParams<any, TContext>> */ = {
137+
...rp,
132138
rawQuery,
133139
args: {
134-
filter: { ...resolveParams.args.filter },
140+
filter: { ...rp.args.filter },
135141
},
136142
};
137143

@@ -146,7 +152,7 @@ export function preparePaginationResolver<TSource, TContext>(
146152

147153
if (projection && projection.items) {
148154
// combine top level projection
149-
// (maybe somebody add additional fields via resolveParams.projection)
155+
// (maybe somebody add additional fields via rp.projection)
150156
// and items (record needed fields)
151157
findManyParams.projection = { ...projection, ...projection.items };
152158
} else {
@@ -162,8 +168,8 @@ export function preparePaginationResolver<TSource, TContext>(
162168
}
163169

164170
// pass findMany ResolveParams to top resolver
165-
resolveParams.findManyResolveParams = findManyParams;
166-
resolveParams.countResolveParams = countParams;
171+
rp.findManyResolveParams = findManyParams;
172+
rp.countResolveParams = countParams;
167173

168174
// This allows to optimize and not actually call the findMany resolver
169175
// if only the count is projected

0 commit comments

Comments
 (0)