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