1 | import { BaseSelectionSetProcessor, } from '@graphql-codegen/visitor-plugin-common';
|
2 | export 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 |
|
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 | }
|