@@ -218,68 +218,48 @@ export class GenerateFragments {
218
218
const type : any = ast . getType ( typeName ) ;
219
219
const { name } = type ;
220
220
221
- const fields : GraphQLFieldMap < any , any > = type . getFields ( ) ;
221
+ const fields = this . generateFragments ( type , ast ) ;
222
+ if ( fields . length === 0 ) return null
222
223
return {
223
224
name,
224
225
fragment : `fragment ${ name } on ${ name } {
225
- ${ Object . keys ( fields )
226
- . map ( field => {
227
- return this . printField ( field , fields [ field ] , ast ) ;
228
- } )
229
- . filter ( field => field != null )
230
- . join ( this . indentedLine ( 1 ) ) }
226
+ ${ fields . join ( this . indentedLine ( 1 ) ) }
231
227
}
232
228
`
233
229
} ;
234
- } ) ;
230
+ } ) . filter ( frag => frag != null ) ;
235
231
236
232
const noRelationsFragments = typeNames . map ( typeName => {
237
233
const type : any = ast . getType ( typeName ) ;
238
234
const { name } = type ;
239
235
240
- const fields : GraphQLFieldMap < any , any > = type . getFields ( ) ;
236
+ const fields = this . generateFragments ( type , ast , this . fragmentType . NO_RELATIONS ) ;
237
+ if ( fields . length === 0 ) return null
238
+
241
239
return {
242
240
name,
243
241
fragment : `fragment ${ name } ${
244
242
this . fragmentType . NO_RELATIONS
245
243
} on ${ name } {
246
- ${ Object . keys ( fields )
247
- . map ( field => {
248
- return this . printField (
249
- field ,
250
- fields [ field ] ,
251
- ast ,
252
- this . fragmentType . NO_RELATIONS
253
- ) ;
254
- } )
255
- // Some fields should not be printed, ie. fields with relations.
256
- // Remove those from the output by returning null from printField.
257
- . filter ( field => field != null )
258
- . join ( this . indentedLine ( 1 ) ) }
244
+ ${ fields . join ( this . indentedLine ( 1 ) ) }
259
245
}
260
246
`
261
247
} ;
262
- } ) ;
248
+ } ) . filter ( frag => frag != null ) ;
263
249
const deepFragments = typeNames . map ( typeName => {
264
250
const type : any = ast . getType ( typeName ) ;
265
251
const { name } = type ;
266
252
267
- const fields : GraphQLFieldMap < any , any > = type . getFields ( ) ;
253
+ const fields = this . generateFragments ( type , ast , this . fragmentType . DEEP ) ;
254
+ if ( fields . length === 0 ) return null
268
255
return {
269
256
name,
270
257
fragment : `fragment ${ name } ${ this . fragmentType . DEEP } on ${ name } {
271
- ${ Object . keys ( fields )
272
- . map ( field => {
273
- return this . printField ( field , fields [ field ] , ast , this . fragmentType . DEEP ) ;
274
- } )
275
- // Some fields should not be printed, ie. fields with relations.
276
- // Remove those from the output by returning null from printField.
277
- . filter ( field => field != null )
278
- . join ( this . indentedLine ( 1 ) ) }
258
+ ${ fields . join ( this . indentedLine ( 1 ) ) }
279
259
}
280
260
`
281
261
} ;
282
- } ) ;
262
+ } ) . filter ( frag => frag != null ) ;
283
263
284
264
if ( generator === "js" ) {
285
265
return `// THIS FILE HAS BEEN AUTO-GENERATED BY "graphql-cli-generate-fragments"
@@ -344,11 +324,24 @@ ${fragment}`
344
324
` ;
345
325
}
346
326
327
+
328
+
329
+ private generateFragments ( type : any , ast : GraphQLSchema , fragmentType = this . fragmentType . DEFAULT ) {
330
+ const fields : GraphQLFieldMap < any , any > = type . getFields ( ) ;
331
+ const fragmentFields = Object . keys ( fields )
332
+ . map ( field => {
333
+ return this . printField ( field , fields [ field ] , ast , fragmentType ) ;
334
+ } )
335
+ // Some fields should not be printed, ie. fields with relations.
336
+ // Remove those from the output by returning null from printField.
337
+ . filter ( field => field != null ) ;
338
+ return fragmentFields ;
339
+ }
347
340
private printField (
348
341
fieldName ,
349
342
field ,
350
343
ast : GraphQLSchema ,
351
- fragmentType = this . fragmentType . DEFAULT ,
344
+ fragmentType ,
352
345
indent = 1
353
346
) {
354
347
let constructorName =
@@ -393,7 +386,7 @@ ${fragment}`
393
386
}
394
387
395
388
if ( constructorName === "GraphQLObjectType" ) {
396
- // if (fragmentType === this.fragmentType.NO_RELATIONS) return null;
389
+ if ( fragmentType === this . fragmentType . NO_RELATIONS ) return null ;
397
390
let typeName = null ;
398
391
// if(field.name !== undefined)
399
392
typeName =
@@ -550,3 +543,5 @@ ${fragment}`
550
543
551
544
private projectDisplayName = ( ) => chalk . green ( this . projectName ) ;
552
545
}
546
+
547
+
0 commit comments