@@ -7,27 +7,142 @@ exports.composeWithDataLoader = composeWithDataLoader;
7
7
8
8
var _graphqlCompose = require ( 'graphql-compose' ) ;
9
9
10
+ var _dataloader = require ( 'dataloader' ) ;
11
+
12
+ var _dataloader2 = _interopRequireDefault ( _dataloader ) ;
13
+
14
+ var _objectHash = require ( 'object-hash' ) ;
15
+
16
+ var _objectHash2 = _interopRequireDefault ( _objectHash ) ;
17
+
18
+ var _singleContinous = require ( './singleContinous' ) ;
19
+
20
+ var _singleContinous2 = _interopRequireDefault ( _singleContinous ) ;
21
+
22
+ var _definitions = require ( './definitions' ) ;
23
+
24
+ function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
25
+
10
26
function composeWithDataLoader ( typeComposer ) {
27
+ var options = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
28
+
11
29
12
- if ( ! ( typeComposer instanceof _graphqlCompose . TypeComposer ) ) {
13
- throw new Error ( 'You should provide TypeComposer instance to composeWithDataLoader method' ) ;
14
- }
30
+ // if (!(typeComposer instanceof TypeComposer)) {
31
+ // throw new Error('You should provide TypeComposer instance to composeWithDataLoader method');
32
+ // }
33
+ //
34
+ //
35
+ /**
36
+ * Set defaults
37
+ */
38
+ options = {
39
+ cacheExpiration : options . cacheExpiration || 300 ,
40
+ removeProjection : options . removeProjection || true ,
41
+ debug : options . debug || false
42
+ } ;
15
43
16
44
/**
17
- * get resolvers to add DataLoader to
45
+ * Add DataLoader to FindById
18
46
*/
19
- var count = typeComposer . get ( '$count' ) ;
20
- var findById = typeComposer . get ( '$findById' ) ;
21
- var findByIds = typeComposer . get ( '$findByIds' ) ;
22
- var findMany = typeComposer . get ( '$findMany' ) ;
23
- var findOne = typeComposer . get ( '$findOne' ) ;
24
- console . log ( typeComposer . getTypeName ( ) ) ;
25
-
26
- if ( ! findById ) throw new Error ( 'TypeComposer(' + typeComposer . getTypeName ( ) + ') provided to composeWithRelay ' + 'should have findById resolver.' ) ;
27
- if ( ! findById ) throw new Error ( 'TypeComposer(' + typeComposer . getTypeName ( ) + ') provided to composeWithRelay ' + 'should have findById resolver.' ) ;
28
- if ( ! findByIds ) throw new Error ( 'TypeComposer(' + typeComposer . getTypeName ( ) + ') provided to composeWithRelay ' + 'should have findByIds resolver.' ) ;
29
- if ( ! findMany ) throw new Error ( 'TypeComposer(' + typeComposer . getTypeName ( ) + ') provided to composeWithRelay ' + 'should have findMany resolver.' ) ;
30
- if ( ! findOne ) throw new Error ( 'TypeComposer(' + typeComposer . getTypeName ( ) + ') provided to composeWithRelay ' + 'should have findOne resolver.' ) ;
47
+ var findByIdResolver = typeComposer . getResolver ( 'findById' ) ;
48
+ var findByIdLoader = new _dataloader2 . default ( function ( resolveParamsArray ) {
49
+ if ( options . debug ) console . log ( 'New db request (findById)' ) ;
50
+ var params = resolveParamsArray [ 0 ] ;
51
+
52
+ return findByIdResolver . resolve ( params ) . then ( function ( res ) {
53
+ return [ res ] ;
54
+ } ) ;
55
+ } , { cacheKeyFn : function cacheKeyFn ( key ) {
56
+ return key . args . _id . toString ( ) ;
57
+ } } ) ;
58
+
59
+ typeComposer . setResolver ( 'findById' , findByIdResolver . wrapResolve ( function ( fn ) {
60
+ return function ( rp ) {
61
+ if ( options . removeProjection ) delete rp . projection ;
62
+ _singleContinous2 . default . run ( findByIdLoader , rp , options ) ;
63
+ return findByIdLoader . load ( rp ) ;
64
+ } ;
65
+ } ) ) ;
66
+
67
+ /**
68
+ * Add DataLoader to FindByIds
69
+ */
70
+ // let findByIdsResolver = typeComposer.getResolver('findByIds')
71
+ // let findByIdsLoader = new DataLoader( (resolveParamsArray) => {
72
+ // if (options.debug) console.log('New db request (findByIds)')
73
+ // return findByIdResolver.resolve(resolveParamsArray[0]).then(res => [res])
74
+ // },
75
+ // { cacheKeyFn: key => {
76
+ // let hashKey = hash(key.args)
77
+ // return hashKey
78
+ // } })
79
+
80
+ // typeComposer.setResolver(
81
+ // 'findByIds',
82
+ // findByIdsResolver.wrapResolve(fn => rp => {
83
+ // SingleContinous.run(findByIdsLoader, rp, opt)
84
+ // return findByIdsLoader.load(rp)
85
+ // })
86
+ // )
87
+
88
+
89
+ /**
90
+ * Add DataLoader to FindMany
91
+ */
92
+ // let findManyResolver = typeComposer.getResolver('findMany')
93
+ // let findManyLoader = new DataLoader( (resolveParamsArray) => {
94
+ // if (options.debug) console.log('New db request (findMany)')
95
+ // console.log(resolveParamsArray[0])
96
+ // //response
97
+ // return findManyResolver.resolve(resolveParamsArray[0]).then(res => [res])
98
+ // },
99
+ // { cacheKeyFn: key => {
100
+ // let hashKey = hash(key.args)
101
+ // return hashKey
102
+ // } })
103
+
104
+ // typeComposer.setResolver(
105
+ // 'findMany',
106
+ // findManyResolver.wrapResolve(fn => rp => {
107
+ // if (options.removeProjection) delete rp.projection
108
+ // SingleContinous.run(findManyLoader, rp, options)
109
+ // return findManyLoader.load(rp)
110
+ // })
111
+ // )
112
+
113
+
114
+ /**
115
+ * Add DataLoader to Connection
116
+ */
117
+ var connectionResolver = typeComposer . getResolver ( 'connection' ) ;
118
+ var connectionFieldNames = typeComposer . getFieldNames ( ) ;
119
+ var connectionLoader = new _dataloader2 . default ( function ( resolveParamsArray ) {
120
+ if ( options . debug ) console . log ( 'New db request (connection)' ) ;
121
+ var params = resolveParamsArray [ 0 ] ;
122
+ //response
123
+ return connectionResolver . resolve ( params ) . then ( function ( res ) {
124
+ return [ res ] ;
125
+ } ) ;
126
+ } , { cacheKeyFn : function cacheKeyFn ( key ) {
127
+ var hashKey = ( 0 , _objectHash2 . default ) ( key . args ) ;
128
+ return hashKey ;
129
+ } } ) ;
130
+
131
+ typeComposer . setResolver ( 'connection' , connectionResolver . wrapResolve ( function ( fn ) {
132
+ return function ( rp ) {
133
+ if ( options . removeProjection ) {
134
+ ( function ( ) {
135
+ var projection = { edges : { node : { } } } ;
136
+ connectionFieldNames . map ( function ( field ) {
137
+ return projection . edges . node [ field ] = true ;
138
+ } ) ;
139
+ rp . projection = projection ;
140
+ } ) ( ) ;
141
+ }
142
+ _singleContinous2 . default . run ( connectionLoader , rp , options ) ;
143
+ return connectionLoader . load ( rp ) ;
144
+ } ;
145
+ } ) ) ;
31
146
32
147
return typeComposer ;
33
148
}
0 commit comments