UNPKG

@graphql-codegen/java-apollo-android

Version:

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

99 lines (98 loc) 4.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.preset = void 0; const path_1 = require("path"); const change_case_all_1 = require("change-case-all"); const graphql_1 = require("graphql"); const file_type_js_1 = require("./file-type.js"); const packageNameToDirectory = (packageName) => { return `./${packageName.split('.').join('/')}/`; }; exports.preset = { buildGeneratesSection: options => { const outDir = options.baseOutputDir; const inputTypesAst = []; (0, graphql_1.visit)(options.schema, { InputObjectTypeDefinition: { enter(node) { inputTypesAst.push(node); }, }, }); const inputTypesDocumentNode = { kind: graphql_1.Kind.DOCUMENT, definitions: inputTypesAst, }; const allAst = (0, graphql_1.concatAST)(options.documents.map(v => v.document)); const operationsAst = allAst.definitions.filter(d => d.kind === graphql_1.Kind.OPERATION_DEFINITION); const fragments = allAst.definitions.filter(d => d.kind === graphql_1.Kind.FRAGMENT_DEFINITION); const externalFragments = fragments.map(frag => ({ isExternal: true, importFrom: frag.name.value, name: frag.name.value, onType: frag.typeCondition.name.value, node: frag, })); return [ { filename: (0, path_1.join)(outDir, packageNameToDirectory(options.config.typePackage), 'CustomType.java'), plugins: options.plugins, pluginMap: options.pluginMap, config: { ...options.config, fileType: file_type_js_1.FileType.CUSTOM_TYPES, }, schema: options.schema, documents: [], }, ...inputTypesDocumentNode.definitions.map((ast) => { const document = { kind: graphql_1.Kind.DOCUMENT, definitions: [ast] }; return { filename: (0, path_1.join)(outDir, packageNameToDirectory(options.config.typePackage), ast.name.value + '.java'), plugins: options.plugins, pluginMap: options.pluginMap, config: { ...options.config, fileType: file_type_js_1.FileType.INPUT_TYPE, skipDocumentsValidation: true, }, schema: options.schema, documents: [{ document, location: '' }], }; }), ...operationsAst.map((ast) => { const fileName = ast.name.value.toLowerCase().endsWith(ast.operation) ? ast.name.value : `${ast.name.value}${(0, change_case_all_1.pascalCase)(ast.operation)}`; const document = { kind: graphql_1.Kind.DOCUMENT, definitions: [ast] }; return { filename: (0, path_1.join)(outDir, packageNameToDirectory(options.config.package), fileName + '.java'), plugins: options.plugins, pluginMap: options.pluginMap, config: { ...options.config, fileType: file_type_js_1.FileType.OPERATION, externalFragments, }, schema: options.schema, documents: [{ document, location: '' }], }; }), ...fragments.map((ast) => { const document = { kind: graphql_1.Kind.DOCUMENT, definitions: [ast] }; return { filename: (0, path_1.join)(outDir, packageNameToDirectory(options.config.fragmentPackage), ast.name.value + '.java'), plugins: options.plugins, pluginMap: options.pluginMap, config: { ...options.config, fileType: file_type_js_1.FileType.FRAGMENT, externalFragments, }, schema: options.schema, documents: [{ document, location: '' }], }; }), ]; }, };