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