UNPKG

@graphql-codegen/java-apollo-android

Version:

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

70 lines (68 loc) 2.56 kB
"use strict"; 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;