1
1
import { getPromise } from './promise' ;
2
2
import { isFunction , Promisify , isNotNullOrUndefined } from './util' ;
3
3
4
+ const Promise = getPromise ( ) ;
4
5
5
- export const createResolver = ( resFn , errFn ) => {
6
+ export interface ResultFunction < ResulType > {
7
+ ( root , args , context , info ) : Promise < ResulType > | ResulType | void
8
+ }
9
+
10
+ export interface ErrorFunction < ErrorType > {
11
+ ( root , args , context , err ) : ErrorType | void
12
+ }
13
+
14
+ export interface Resolver < ResulType > {
15
+ ( root , args : { } , context : { } , info : { } ) : Promise < ResulType >
16
+ createResolver ?: < R , E > ( resFn : ResultFunction < R > , errFn ?: ErrorFunction < E > ) => Resolver < R >
17
+ }
18
+
19
+ export const createResolver = < R , E > ( resFn : ResultFunction < R > , errFn : ErrorFunction < E > ) => {
6
20
const Promise = getPromise ( ) ;
7
- const baseResolver = ( root , args = { } , context = { } , info = { } ) => {
21
+ const baseResolver : Resolver < R > = ( root , args = { } , context = { } , info = { } ) => {
8
22
// Return resolving promise with `null` if the resolver function param is not a function
9
23
if ( ! isFunction ( resFn ) ) return Promise . resolve ( null ) ;
10
24
return Promisify ( resFn ) ( root , args , context , info ) . catch ( e => {
@@ -20,7 +34,7 @@ export const createResolver = (resFn, errFn) => {
20
34
} ) ;
21
35
} ) ;
22
36
} ;
23
- baseResolver [ ' createResolver' ] = ( cResFn , cErrFn ) => {
37
+ baseResolver . createResolver = ( cResFn , cErrFn ) => {
24
38
const Promise = getPromise ( ) ;
25
39
26
40
const childResFn = ( root , args , context , info = { } ) => {
0 commit comments