1
1
/* @flow */
2
2
/* eslint-disable no-param-reassign, no-use-before-define */
3
3
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' ;
6
10
import type { GraphQLResolveInfo } from 'graphql-compose/lib/graphql' ;
7
11
import type { ComposeWithPaginationOpts } from './composeWithPagination' ;
8
12
import preparePaginationType from './types/paginationType' ;
9
13
10
14
const DEFAULT_PER_PAGE = 20 ;
11
15
12
- export type PaginationResolveParams < TSource , TContext > = {
13
- source : TSource ,
16
+ export type PaginationResolveParams < TContext > = {
17
+ source : any ,
14
18
args : {
15
19
page ?: ?number ,
16
20
perPage ?: ?number ,
@@ -39,24 +43,24 @@ export type PaginationInfoType = {|
39
43
hasNextPage : boolean ,
40
44
| } ;
41
45
42
- export function preparePaginationResolver < TSource , TContext > (
43
- typeComposer : TypeComposer ,
46
+ export function preparePaginationResolver (
47
+ tc : TypeComposer ,
44
48
opts : ComposeWithPaginationOpts
45
49
) : Resolver {
46
- if ( ! typeComposer || typeComposer . constructor . name !== 'TypeComposer' ) {
50
+ if ( ! tc || tc . constructor . name !== 'TypeComposer' ) {
47
51
throw new Error ( 'First arg for prepareConnectionResolver() should be instance of TypeComposer' ) ;
48
52
}
49
53
50
54
if ( ! opts . countResolverName ) {
51
55
throw new Error (
52
- `TypeComposer(${ typeComposer . getTypeName ( ) } ) provided to composeWithConnection ` +
56
+ `TypeComposer(${ tc . getTypeName ( ) } ) provided to composeWithConnection ` +
53
57
'should have option `opts.countResolverName`.'
54
58
) ;
55
59
}
56
- const countResolver = typeComposer . getResolver ( opts . countResolverName ) ;
60
+ const countResolver = tc . getResolver ( opts . countResolverName ) ;
57
61
if ( ! countResolver ) {
58
62
throw new Error (
59
- `TypeComposer(${ typeComposer . getTypeName ( ) } ) provided to composeWithConnection ` +
63
+ `TypeComposer(${ tc . getTypeName ( ) } ) provided to composeWithConnection ` +
60
64
`should have resolver with name '${ opts . countResolverName } ' ` +
61
65
'due opts.countResolverName.'
62
66
) ;
@@ -65,14 +69,14 @@ export function preparePaginationResolver<TSource, TContext>(
65
69
66
70
if ( ! opts . findResolverName ) {
67
71
throw new Error (
68
- `TypeComposer(${ typeComposer . getTypeName ( ) } ) provided to composeWithConnection ` +
72
+ `TypeComposer(${ tc . getTypeName ( ) } ) provided to composeWithConnection ` +
69
73
'should have option `opts.findResolverName`.'
70
74
) ;
71
75
}
72
- const findManyResolver = typeComposer . getResolver ( opts . findResolverName ) ;
76
+ const findManyResolver = tc . getResolver ( opts . findResolverName ) ;
73
77
if ( ! findManyResolver ) {
74
78
throw new Error (
75
- `TypeComposer(${ typeComposer . getTypeName ( ) } ) provided to composeWithConnection ` +
79
+ `TypeComposer(${ tc . getTypeName ( ) } ) provided to composeWithConnection ` +
76
80
`should have resolver with name '${ opts . findResolverName } ' ` +
77
81
'due opts.countResolverName.'
78
82
) ;
@@ -93,8 +97,8 @@ export function preparePaginationResolver<TSource, TContext>(
93
97
}
94
98
}
95
99
96
- return new Resolver ( {
97
- type : preparePaginationType ( typeComposer ) ,
100
+ return new tc . constructor . schemaComposer . Resolver ( {
101
+ type : preparePaginationType ( tc ) ,
98
102
name : 'pagination' ,
99
103
kind : 'query' ,
100
104
args : {
@@ -110,12 +114,14 @@ export function preparePaginationResolver<TSource, TContext>(
110
114
...( additionalArgs : any ) ,
111
115
} ,
112
116
// eslint-disable-next-line
113
- resolve : async ( resolveParams : $Shape < PaginationResolveParams < TSource , TContext >> ) => {
117
+ resolve : async /* :: <TContext> */ (
118
+ rp /* : $Shape<PaginationResolveParams<TContext>> */
119
+ ) => {
114
120
let countPromise ;
115
121
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 ,
119
125
} ;
120
126
121
127
const page = parseInt ( args . page , 10 ) || 1 ;
@@ -127,11 +133,11 @@ export function preparePaginationResolver<TSource, TContext>(
127
133
throw new Error ( 'Argument `perPage` should be positive number.' ) ;
128
134
}
129
135
130
- const countParams : $Shape < ResolveParams < TSource , TContext > > = {
131
- ...resolveParams ,
136
+ const countParams /* : $Shape<ResolveParams<any , TContext>> */ = {
137
+ ...rp ,
132
138
rawQuery,
133
139
args : {
134
- filter : { ...resolveParams . args . filter } ,
140
+ filter : { ...rp . args . filter } ,
135
141
} ,
136
142
} ;
137
143
@@ -146,7 +152,7 @@ export function preparePaginationResolver<TSource, TContext>(
146
152
147
153
if ( projection && projection . items ) {
148
154
// combine top level projection
149
- // (maybe somebody add additional fields via resolveParams .projection)
155
+ // (maybe somebody add additional fields via rp .projection)
150
156
// and items (record needed fields)
151
157
findManyParams . projection = { ...projection , ...projection . items } ;
152
158
} else {
@@ -162,8 +168,8 @@ export function preparePaginationResolver<TSource, TContext>(
162
168
}
163
169
164
170
// pass findMany ResolveParams to top resolver
165
- resolveParams . findManyResolveParams = findManyParams ;
166
- resolveParams . countResolveParams = countParams ;
171
+ rp . findManyResolveParams = findManyParams ;
172
+ rp . countResolveParams = countParams ;
167
173
168
174
// This allows to optimize and not actually call the findMany resolver
169
175
// if only the count is projected
0 commit comments