UNPKG

@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
"use strict"; 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;