@graphql-codegen/java-apollo-android
Version:
GraphQL Code Generator plugin for generating Java classes for Apollo-Android
70 lines (68 loc) • 2.56 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomTypeClassVisitor = void 0;
const graphql_1 = require("graphql");
const java_common_1 = require("@graphql-codegen/java-common");
const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common");
const base_java_visitor_js_1 = require("./base-java-visitor.js");
const imports_js_1 = require("./imports.js");
const filteredScalars = ['String', 'Float', 'Int', 'Boolean'];
class CustomTypeClassVisitor extends base_java_visitor_js_1.BaseJavaVisitor {
constructor(schema, rawConfig) {
super(schema, rawConfig, {
typePackage: rawConfig.typePackage || 'type',
});
}
extract(name) {
const lastIndex = name.lastIndexOf('.');
if (lastIndex === -1) {
return {
className: name,
importFrom: imports_js_1.Imports[name] || null,
};
}
return {
className: name.substring(lastIndex + 1),
importFrom: name,
};
}
additionalContent() {
this._imports.add(imports_js_1.Imports.ScalarType);
this._imports.add(imports_js_1.Imports.Class);
this._imports.add(imports_js_1.Imports.Override);
this._imports.add(imports_js_1.Imports.Generated);
const allTypes = this._schema.getTypeMap();
const enumValues = Object.keys(allTypes)
.filter(t => (0, graphql_1.isScalarType)(allTypes[t]) && !filteredScalars.includes(t))
.map(t => allTypes[t])
.map(scalarType => {
const uppercaseName = scalarType.name.toUpperCase();
const javaType = this.extract(this.scalars[scalarType.name] || 'String');
if (javaType.importFrom) {
this._imports.add(javaType.importFrom);
}
return (0, visitor_plugin_common_1.indentMultiline)(`${uppercaseName} {
@Override
public String typeName() {
return "${scalarType.name}";
}
@Override
public Class javaType() {
return ${javaType.className}.class;
}
}`);
})
.join(',\n\n');
return new java_common_1.JavaDeclarationBlock()
.annotate([`Generated("Apollo GraphQL")`])
.access('public')
.asKind('enum')
.withName('CustomType')
.implements(['ScalarType'])
.withBlock(enumValues).string;
}
getPackage() {
return this.config.typePackage;
}
}
exports.CustomTypeClassVisitor = CustomTypeClassVisitor;
;