UNPKG

2.83 kBJavaScriptView Raw
1import { BaseSelectionSetProcessor, } from '@graphql-codegen/visitor-plugin-common';
2export class TypeScriptSelectionSetProcessor extends BaseSelectionSetProcessor {
3 transformPrimitiveFields(schemaType, fields, unsetTypes) {
4 if (fields.length === 0) {
5 return [];
6 }
7 const parentName = (this.config.namespacedImportName ? `${this.config.namespacedImportName}.` : '') +
8 this.config.convertName(schemaType.name, {
9 useTypesPrefix: true,
10 });
11 if (unsetTypes) {
12 return [`MakeEmpty<${parentName}, ${fields.map(field => `'${field.fieldName}'`).join(' | ')}>`];
13 }
14 let hasConditionals = false;
15 const conditilnalsList = [];
16 let resString = `Pick<${parentName}, ${fields
17 .map(field => {
18 if (field.isConditional) {
19 hasConditionals = true;
20 conditilnalsList.push(field.fieldName);
21 }
22 return `'${field.fieldName}'`;
23 })
24 .join(' | ')}>`;
25 if (hasConditionals) {
26 const avoidOptional =
27 // TODO: check type and exec only if relevant
28 this.config.avoidOptionals === true ||
29 (typeof this.config.avoidOptionals === 'object' &&
30 (this.config.avoidOptionals.field ||
31 this.config.avoidOptionals.inputValue ||
32 this.config.avoidOptionals.object));
33 const transform = avoidOptional ? 'MakeMaybe' : 'MakeOptional';
34 resString = `${this.config.namespacedImportName ? `${this.config.namespacedImportName}.` : ''}${transform}<${resString}, ${conditilnalsList.map(field => `'${field}'`).join(' | ')}>`;
35 }
36 return [resString];
37 }
38 transformTypenameField(type, name) {
39 return [`{ ${name}: ${type} }`];
40 }
41 transformAliasesPrimitiveFields(schemaType, fields) {
42 if (fields.length === 0) {
43 return [];
44 }
45 const parentName = (this.config.namespacedImportName ? `${this.config.namespacedImportName}.` : '') +
46 this.config.convertName(schemaType.name, {
47 useTypesPrefix: true,
48 });
49 return [
50 `{ ${fields
51 .map(aliasedField => {
52 const value = aliasedField.fieldName === '__typename'
53 ? `'${schemaType.name}'`
54 : `${parentName}['${aliasedField.fieldName}']`;
55 return `${aliasedField.alias}: ${value}`;
56 })
57 .join(', ')} }`,
58 ];
59 }
60 transformLinkFields(fields) {
61 if (fields.length === 0) {
62 return [];
63 }
64 return [`{ ${fields.map(field => `${field.alias || field.name}: ${field.selectionSet}`).join(', ')} }`];
65 }
66}