UNPKG

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