@graphql-codegen/java-apollo-android
Version: 
GraphQL Code Generator plugin for generating Java classes for Apollo-Android
46 lines (45 loc) • 1.72 kB
JavaScript
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'),
    };
};