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' ;
610import type { GraphQLResolveInfo } from 'graphql-compose/lib/graphql' ;
711import type { ComposeWithPaginationOpts } from './composeWithPagination' ;
812import preparePaginationType from './types/paginationType' ;
913
1014const 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