@@ -25,7 +25,9 @@ import {
25
25
26
26
export class GenerateFragments {
27
27
private config : GraphQLConfig ;
28
- private fragmentsExtensionConfig : { "generate-fragments" : string } | undefined ;
28
+ private fragmentsExtensionConfig :
29
+ | { "generate-fragments" : string }
30
+ | undefined ;
29
31
private projectName : string ;
30
32
private project : GraphQLProjectConfig ;
31
33
@@ -172,7 +174,7 @@ export class GenerateFragments {
172
174
private fragmentType = {
173
175
DEFAULT : "" ,
174
176
NO_RELATIONS : "NoNesting" ,
175
- DEEP : "DeepNesting" ,
177
+ DEEP : "DeepNesting"
176
178
} ;
177
179
178
180
private makeFragments ( schemaContents : string , generator : string ) {
@@ -205,7 +207,6 @@ export class GenerateFragments {
205
207
: 1
206
208
) ;
207
209
208
-
209
210
// console.log(typeNames)
210
211
211
212
const standardFragments = typeNames . map ( typeName => {
@@ -216,15 +217,15 @@ export class GenerateFragments {
216
217
return {
217
218
name,
218
219
fragment : `fragment ${ name } on ${ name } {
219
- ${ Object . keys ( fields ) . map ( field => {
220
+ ${ Object . keys ( fields )
221
+ . map ( field => {
220
222
return this . printField ( field , fields [ field ] , ast ) ;
221
223
} )
222
224
. filter ( field => field != null )
223
225
. join ( this . indentedLine ( 1 ) ) }
224
226
}
225
227
`
226
228
} ;
227
-
228
229
} ) ;
229
230
230
231
const noRelationsFragments = typeNames . map ( typeName => {
@@ -234,9 +235,17 @@ export class GenerateFragments {
234
235
const fields : GraphQLFieldMap < any , any > = type . getFields ( ) ;
235
236
return {
236
237
name,
237
- fragment : `fragment ${ name } ${ this . fragmentType . NO_RELATIONS } on ${ name } {
238
- ${ Object . keys ( fields ) . map ( field => {
239
- return this . printField ( field , fields [ field ] , ast , this . fragmentType . NO_RELATIONS ) ;
238
+ fragment : `fragment ${ name } ${
239
+ this . fragmentType . NO_RELATIONS
240
+ } on ${ name } {
241
+ ${ Object . keys ( fields )
242
+ . map ( field => {
243
+ return this . printField (
244
+ field ,
245
+ fields [ field ] ,
246
+ ast ,
247
+ this . fragmentType . NO_RELATIONS
248
+ ) ;
240
249
} )
241
250
// Some fields should not be printed, ie. fields with relations.
242
251
// Remove those from the output by returning null from printField.
@@ -245,7 +254,6 @@ export class GenerateFragments {
245
254
}
246
255
`
247
256
} ;
248
-
249
257
} ) ;
250
258
const deepFragments = typeNames . map ( typeName => {
251
259
const type : any = ast . getType ( typeName ) ;
@@ -255,7 +263,8 @@ export class GenerateFragments {
255
263
return {
256
264
name,
257
265
fragment : `fragment ${ name } ${ this . fragmentType . DEEP } on ${ name } {
258
- ${ Object . keys ( fields ) . map ( field => {
266
+ ${ Object . keys ( fields )
267
+ . map ( field => {
259
268
return this . printField ( field , fields [ field ] , ast , this . fragmentType . DEEP ) ;
260
269
} )
261
270
// Some fields should not be printed, ie. fields with relations.
@@ -265,68 +274,78 @@ export class GenerateFragments {
265
274
}
266
275
`
267
276
} ;
268
-
269
277
} ) ;
270
278
271
- if ( generator === 'js' ) {
279
+ if ( generator === "js" ) {
272
280
return `// THIS FILE HAS BEEN AUTO-GENERATED BY "graphql-cli-generate-fragments"
273
281
// DO NOT EDIT THIS FILE DIRECTLY
274
282
${ standardFragments
275
- . map (
276
- ( { name, fragment } ) => `
283
+ . map (
284
+ ( { name, fragment } ) => `
277
285
export const ${ name } Fragment = \`${ fragment } \`
278
- ` ,
279
- )
280
- . join ( "" ) }
286
+ `
287
+ )
288
+ . join ( "" ) }
281
289
${ noRelationsFragments
282
- . map (
283
- ( { name, fragment } ) => `
290
+ . map (
291
+ ( { name, fragment } ) => `
284
292
export const ${ name } ${ this . fragmentType . NO_RELATIONS } Fragment = \`${ fragment } \`
285
- ` ,
286
- )
287
- . join ( "" ) }
293
+ `
294
+ )
295
+ . join ( "" ) }
288
296
${ deepFragments
289
- . map (
290
- ( { name, fragment } ) => `
297
+ . map (
298
+ ( { name, fragment } ) => `
291
299
export const ${ name } ${ this . fragmentType . DEEP } Fragment = \`${ fragment } \`
292
- ` ,
293
- )
294
- . join ( "" ) }
300
+ `
301
+ )
302
+ . join ( "" ) }
295
303
` ;
296
- }
304
+ }
297
305
return `# THIS FILE HAS BEEN AUTO-GENERATED BY "graphql-cli-generate-fragments"
298
306
# DO NOT EDIT THIS FILE DIRECTLY
299
307
300
308
# Standard Fragments
301
309
# Nested fragments will spread one layer deep
302
310
303
311
${ standardFragments
304
- . map ( ( { name, fragment } ) => `
305
- ${ fragment } `)
306
- . join ( "" ) }
312
+ . map (
313
+ ( { name, fragment } ) => `
314
+ ${ fragment } `
315
+ )
316
+ . join ( "" ) }
307
317
308
318
# No Relational objects
309
319
# No nested fragments
310
320
311
321
${ noRelationsFragments
312
- . map ( ( { name, fragment } ) => `
313
- ${ fragment } `)
314
- . join ( "" ) }
322
+ . map (
323
+ ( { name, fragment } ) => `
324
+ ${ fragment } `
325
+ )
326
+ . join ( "" ) }
315
327
316
328
# Deeply nested Fragments
317
329
# Will include n nested fragments
318
330
# If there is a recursive relation you will receive a
319
331
# "Cannot spread fragment within itself" error when using
320
332
321
333
${ deepFragments
322
- . map ( ( { name, fragment } ) => `
323
- ${ fragment } `)
324
- . join ( "" ) }
325
- `
326
-
334
+ . map (
335
+ ( { name, fragment } ) => `
336
+ ${ fragment } `
337
+ )
338
+ . join ( "" ) }
339
+ ` ;
327
340
}
328
341
329
- private printField ( fieldName , field , ast : GraphQLSchema , fragmentType = this . fragmentType . DEFAULT , indent = 1 ) {
342
+ private printField (
343
+ fieldName ,
344
+ field ,
345
+ ast : GraphQLSchema ,
346
+ fragmentType = this . fragmentType . DEFAULT ,
347
+ indent = 1
348
+ ) {
330
349
let constructorName =
331
350
field . type . constructor . name && field . type . constructor . name ;
332
351
if ( constructorName === "Object" )
@@ -337,10 +356,13 @@ ${fragment}`)
337
356
338
357
if ( constructorName === "GraphQLList" ) {
339
358
field =
340
- ( field . astNode . type . type . type && field . astNode . type . type . type ) || null ;
359
+ ( field . astNode . type . type . type && field . astNode . type . type . type ) ||
360
+ ( ( field . astNode . type . type && field . astNode . type . type ) || null ) ;
361
+
362
+ if ( field === null ) {
363
+ throw new Error ( `Schema malformed - list` ) ;
364
+ }
341
365
constructorName = ast . getType ( field . name . value ) . constructor . name ;
342
- if ( field === null ) return null ;
343
- // if(noRelation) return null
344
366
}
345
367
346
368
if ( constructorName === "GraphQLNonNull" || field . kind === "NonNullType" ) {
@@ -366,7 +388,7 @@ ${fragment}`)
366
388
}
367
389
368
390
if ( constructorName === "GraphQLObjectType" ) {
369
- if ( fragmentType === this . fragmentType . NO_RELATIONS ) return null
391
+ if ( fragmentType === this . fragmentType . NO_RELATIONS ) return null ;
370
392
let typeName = null ;
371
393
// if(field.name !== undefined)
372
394
typeName =
@@ -378,7 +400,9 @@ ${fragment}`)
378
400
" {" +
379
401
this . indentedLine ( indent + 1 ) +
380
402
"..." +
381
- `${ ( fragmentType === this . fragmentType . DEFAULT ) && typeName + this . fragmentType . NO_RELATIONS || typeName + this . fragmentType . DEFAULT } ` +
403
+ `${ ( fragmentType === this . fragmentType . DEFAULT &&
404
+ typeName + this . fragmentType . NO_RELATIONS ) ||
405
+ typeName + this . fragmentType . DEFAULT } ` +
382
406
this . indentedLine ( indent ) +
383
407
"}"
384
408
) ;
0 commit comments