@graphql-codegen/flow-operations
Version:
GraphQL Code Generator plugin for generating Flow types for GraphQL operations (query/mutation/subscription/fragment)
83 lines (82 loc) • 3.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FlowWithPickSelectionSetProcessor = void 0;
const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common");
class FlowWithPickSelectionSetProcessor extends visitor_plugin_common_1.BaseSelectionSetProcessor {
transformAliasesPrimitiveFields(schemaType, fields) {
if (fields.length === 0) {
return [];
}
const useFlowExactObject = this.config.useFlowExactObjects;
const { formatNamedField } = this.config;
const fieldObj = schemaType.getFields();
const parentName = (this.config.namespacedImportName ? `${this.config.namespacedImportName}.` : '') +
this.config.convertName(schemaType.name, {
useTypesPrefix: true,
});
return [
`{${useFlowExactObject ? '|' : ''} ${fields
.map(aliasedField => `${formatNamedField(aliasedField.alias, fieldObj[aliasedField.fieldName].type)}: $ElementType<${parentName}, '${aliasedField.fieldName}'>`)
.join(', ')} ${useFlowExactObject ? '|' : ''}}`,
];
}
buildFieldsIntoObject(allObjectsMerged) {
return `...{ ${allObjectsMerged.join(', ')} }`;
}
buildSelectionSetFromStrings(pieces) {
if (pieces.length === 0) {
return null;
}
if (pieces.length === 1) {
return pieces[0];
}
const useFlowExactObject = this.config.useFlowExactObjects;
return `({${useFlowExactObject ? '|' : ''}\n ${pieces
.map(t => (0, visitor_plugin_common_1.indent)(`...${t}`))
.join(`,\n`)}\n${useFlowExactObject ? '|' : ''}})`;
}
transformLinkFields(fields) {
if (fields.length === 0) {
return [];
}
const useFlowExactObject = this.config.useFlowExactObjects;
return [
`{${useFlowExactObject ? '|' : ''} ${fields
.map(field => `${field.alias || field.name}: ${field.selectionSet}`)
.join(', ')} ${useFlowExactObject ? '|' : ''}}`,
];
}
transformPrimitiveFields(schemaType, fields) {
if (fields.length === 0) {
return [];
}
const useFlowExactObject = this.config.useFlowExactObjects;
const { formatNamedField } = this.config;
const parentName = (this.config.namespacedImportName ? `${this.config.namespacedImportName}.` : '') +
this.config.convertName(schemaType.name, {
useTypesPrefix: true,
});
const fieldObj = schemaType.getFields();
let hasConditionals = false;
const conditilnalsList = [];
let resString = `$Pick<${parentName}, {${useFlowExactObject ? '|' : ''} ${fields
.map(field => {
if (field.isConditional) {
hasConditionals = true;
conditilnalsList.push(field.fieldName);
}
return `${formatNamedField(field.fieldName, fieldObj[field.fieldName].type)}: *`;
})
.join(', ')} ${useFlowExactObject ? '|' : ''}}>`;
if (hasConditionals) {
resString = `$MakeOptional<${resString}, ${conditilnalsList
.map(field => `{ ${field}: * }`)
.join(' | ')}>`;
}
return [resString];
}
transformTypenameField(type, name) {
return [`{ ${name}: ${type} }`];
}
}
exports.FlowWithPickSelectionSetProcessor = FlowWithPickSelectionSetProcessor;