UNPKG

@graphql-codegen/java-apollo-android

Version:

GraphQL Code Generator plugin for generating Java classes for Apollo-Android

46 lines (45 loc) 1.72 kB
import { concatAST, Kind } from 'graphql'; import { oldVisit } from '@graphql-codegen/plugin-helpers'; import { CustomTypeClassVisitor } from './custom-type-class.js'; import { FileType } from './file-type.js'; import { InputTypeVisitor } from './input-type-visitor.js'; import { OperationVisitor } from './operation-visitor.js'; export const plugin = (schema, documents, config) => { const allAst = concatAST(documents.map(v => v.document)); const allFragments = [ ...allAst.definitions.filter(d => d.kind === Kind.FRAGMENT_DEFINITION).map(fragmentDef => ({ node: fragmentDef, name: fragmentDef.name.value, onType: fragmentDef.typeCondition.name.value, isExternal: false, })), ...(config.externalFragments || []), ]; let visitor; switch (config.fileType) { case FileType.FRAGMENT: case FileType.OPERATION: { visitor = new OperationVisitor(schema, config, allFragments); break; } case FileType.INPUT_TYPE: { visitor = new InputTypeVisitor(schema, config); break; } case FileType.CUSTOM_TYPES: { visitor = new CustomTypeClassVisitor(schema, config); break; } } if (!visitor) { return { content: '' }; } const visitResult = oldVisit(allAst, visitor); const additionalContent = visitor.additionalContent(); const imports = visitor.getImports(); return { prepend: [`package ${visitor.getPackage()};\n`, ...imports], content: '\n' + [...visitResult.definitions.filter(a => a && typeof a === 'string'), additionalContent].join('\n'), }; };