Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5162d3a

Browse files
author
Mark
committed
Fixed issue with non-null lists generating null error
1 parent 83b4617 commit 5162d3a

File tree

2 files changed

+70
-46
lines changed

2 files changed

+70
-46
lines changed

‎package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "graphql-cli-generate-fragments",
3-
"version": "1.1.0",
3+
"version": "1.1.2",
44
"description": "Plugin for graphql-cli to generate fragments",
55
"main": "dist/index.js",
66
"typings": "dist/index.d.ts",

‎src/GenerateFragments.ts

Lines changed: 69 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ import {
2525

2626
export class GenerateFragments {
2727
private config: GraphQLConfig;
28-
private fragmentsExtensionConfig: { "generate-fragments": string } | undefined;
28+
private fragmentsExtensionConfig:
29+
| { "generate-fragments": string }
30+
| undefined;
2931
private projectName: string;
3032
private project: GraphQLProjectConfig;
3133

@@ -172,7 +174,7 @@ export class GenerateFragments {
172174
private fragmentType = {
173175
DEFAULT: "",
174176
NO_RELATIONS: "NoNesting",
175-
DEEP: "DeepNesting",
177+
DEEP: "DeepNesting"
176178
};
177179

178180
private makeFragments(schemaContents: string, generator: string) {
@@ -205,7 +207,6 @@ export class GenerateFragments {
205207
: 1
206208
);
207209

208-
209210
// console.log(typeNames)
210211

211212
const standardFragments = typeNames.map(typeName => {
@@ -216,15 +217,15 @@ export class GenerateFragments {
216217
return {
217218
name,
218219
fragment: `fragment ${name} on ${name} {
219-
${Object.keys(fields).map(field => {
220+
${Object.keys(fields)
221+
.map(field => {
220222
return this.printField(field, fields[field], ast);
221223
})
222224
.filter(field => field != null)
223225
.join(this.indentedLine(1))}
224226
}
225227
`
226228
};
227-
228229
});
229230

230231
const noRelationsFragments = typeNames.map(typeName => {
@@ -234,9 +235,17 @@ export class GenerateFragments {
234235
const fields: GraphQLFieldMap<any, any> = type.getFields();
235236
return {
236237
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+
);
240249
})
241250
// Some fields should not be printed, ie. fields with relations.
242251
// Remove those from the output by returning null from printField.
@@ -245,7 +254,6 @@ export class GenerateFragments {
245254
}
246255
`
247256
};
248-
249257
});
250258
const deepFragments = typeNames.map(typeName => {
251259
const type: any = ast.getType(typeName);
@@ -255,7 +263,8 @@ export class GenerateFragments {
255263
return {
256264
name,
257265
fragment: `fragment ${name}${this.fragmentType.DEEP} on ${name} {
258-
${Object.keys(fields).map(field => {
266+
${Object.keys(fields)
267+
.map(field => {
259268
return this.printField(field, fields[field], ast, this.fragmentType.DEEP);
260269
})
261270
// Some fields should not be printed, ie. fields with relations.
@@ -265,68 +274,78 @@ export class GenerateFragments {
265274
}
266275
`
267276
};
268-
269277
});
270278

271-
if (generator === 'js'){
279+
if (generator === "js"){
272280
return `// THIS FILE HAS BEEN AUTO-GENERATED BY "graphql-cli-generate-fragments"
273281
// DO NOT EDIT THIS FILE DIRECTLY
274282
${standardFragments
275-
.map(
276-
({ name, fragment }) => `
283+
.map(
284+
({ name, fragment }) => `
277285
export const ${name}Fragment = \`${fragment}\`
278-
`,
279-
)
280-
.join("")}
286+
`
287+
)
288+
.join("")}
281289
${noRelationsFragments
282-
.map(
283-
({ name, fragment }) => `
290+
.map(
291+
({ name, fragment }) => `
284292
export const ${name}${this.fragmentType.NO_RELATIONS}Fragment = \`${fragment}\`
285-
`,
286-
)
287-
.join("")}
293+
`
294+
)
295+
.join("")}
288296
${deepFragments
289-
.map(
290-
({ name, fragment }) => `
297+
.map(
298+
({ name, fragment }) => `
291299
export const ${name}${this.fragmentType.DEEP}Fragment = \`${fragment}\`
292-
`,
293-
)
294-
.join("")}
300+
`
301+
)
302+
.join("")}
295303
`;
296-
}
304+
}
297305
return `# THIS FILE HAS BEEN AUTO-GENERATED BY "graphql-cli-generate-fragments"
298306
# DO NOT EDIT THIS FILE DIRECTLY
299307
300308
# Standard Fragments
301309
# Nested fragments will spread one layer deep
302310
303311
${standardFragments
304-
.map(({ name, fragment }) => `
305-
${fragment}`)
306-
.join("")}
312+
.map(
313+
({ name, fragment }) => `
314+
${fragment}`
315+
)
316+
.join("")}
307317
308318
# No Relational objects
309319
# No nested fragments
310320
311321
${noRelationsFragments
312-
.map(({ name, fragment }) => `
313-
${fragment}`)
314-
.join("")}
322+
.map(
323+
({ name, fragment }) => `
324+
${fragment}`
325+
)
326+
.join("")}
315327
316328
# Deeply nested Fragments
317329
# Will include n nested fragments
318330
# If there is a recursive relation you will receive a
319331
# "Cannot spread fragment within itself" error when using
320332
321333
${deepFragments
322-
.map(({ name, fragment }) => `
323-
${fragment}`)
324-
.join("")}
325-
`
326-
334+
.map(
335+
({ name, fragment }) => `
336+
${fragment}`
337+
)
338+
.join("")}
339+
`;
327340
}
328341

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+
) {
330349
let constructorName =
331350
field.type.constructor.name && field.type.constructor.name;
332351
if (constructorName === "Object")
@@ -337,10 +356,13 @@ ${fragment}`)
337356

338357
if (constructorName === "GraphQLList") {
339358
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+
}
341365
constructorName = ast.getType(field.name.value).constructor.name;
342-
if (field === null) return null;
343-
// if(noRelation) return null
344366
}
345367

346368
if (constructorName === "GraphQLNonNull" || field.kind === "NonNullType") {
@@ -366,7 +388,7 @@ ${fragment}`)
366388
}
367389

368390
if (constructorName === "GraphQLObjectType") {
369-
if(fragmentType === this.fragmentType.NO_RELATIONS) return null
391+
if(fragmentType === this.fragmentType.NO_RELATIONS) return null;
370392
let typeName = null;
371393
// if(field.name !== undefined)
372394
typeName =
@@ -378,7 +400,9 @@ ${fragment}`)
378400
" {" +
379401
this.indentedLine(indent + 1) +
380402
"..." +
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}` +
382406
this.indentedLine(indent) +
383407
"}"
384408
);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /