diff --git a/src/definitions/enum.ts b/src/definitions/enum.ts index a8dfd6f..896bae2 100644 --- a/src/definitions/enum.ts +++ b/src/definitions/enum.ts @@ -14,7 +14,6 @@ limitations under the License. import { EnumTypeDefinitionNode, EnumValueDefinitionNode } from "graphql"; import { indentMultiline } from "@graphql-codegen/visitor-plugin-common"; import { buildAnnotations } from "../helpers/build-annotations"; -import { KotlinResolversVisitor } from "../visitor"; import { shouldIncludeTypeDefinition } from "../helpers/should-include-type-definition"; import { GraphQLKotlinCodegenConfig } from "../plugin"; @@ -27,14 +26,17 @@ export function buildEnumTypeDefinition( } const enumName = node.name.value; - const enumValues = indentMultiline((node.values ?? []).join(",\n") + ";", 2); + const enumValues = + node.values?.map((valueNode) => { + return buildEnumValueDefinition(valueNode, config); + }) ?? []; const annotations = buildAnnotations({ config, definitionNode: node, }); return `${annotations}enum class ${enumName}(val label: String) { -${enumValues} +${indentMultiline(enumValues.join(",\n") + ";", 2)} companion object { @JvmStatic @@ -45,16 +47,13 @@ ${enumValues} }`; } -export function buildEnumValueDefinition( - this: KotlinResolversVisitor, +function buildEnumValueDefinition( node: EnumValueDefinitionNode, + config: GraphQLKotlinCodegenConfig, ) { const annotations = buildAnnotations({ - config: this.config, + config, definitionNode: node, }); - return `${annotations}${this.convertName(node, { - useTypesPrefix: false, - transformUnderscore: true, - })}("${node.name.value}")`; + return `${annotations}${config.convert(node)}("${node.name.value}")`; } diff --git a/src/plugin.ts b/src/plugin.ts index 12b5bd1..616aca8 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -14,17 +14,22 @@ limitations under the License. import { dirname, normalize } from "path"; import { getCachedDocumentNodeFromSchema, - oldVisit, PluginFunction, } from "@graphql-codegen/plugin-helpers"; import { buildPackageNameFromPath } from "@graphql-codegen/java-common"; -import { KotlinResolversVisitor } from "./visitor"; -import { RawConfig } from "@graphql-codegen/visitor-plugin-common"; +import { KotlinVisitor } from "./visitor"; +import { + ParsedConfig, + RawConfig, +} from "@graphql-codegen/visitor-plugin-common"; import { Input, safeParse } from "valibot"; import { configSchema } from "./config"; import { addDependentTypes } from "./helpers/add-dependent-types"; +import { visit } from "graphql"; -export type GraphQLKotlinCodegenConfig = RawConfig & Input; +export type GraphQLKotlinCodegenConfig = RawConfig & + ParsedConfig & + Input; export const plugin: PluginFunction = ( schema, _, @@ -48,11 +53,9 @@ export const plugin: PluginFunction = ( } addDependentTypes(config, schema); - const visitor = new KotlinResolversVisitor(config, schema); + const visitor = new KotlinVisitor(config, schema); const astNode = getCachedDocumentNodeFromSchema(schema); - const visitorResult: { definitions: unknown[] } = oldVisit(astNode, { - leave: visitor as Parameters[1]["leave"], - }); + const { definitions } = visit(astNode, visitor); const packageName = `package ${ config.packageName ?? buildPackageNameFromPath(relevantPath) }\n`; @@ -62,7 +65,7 @@ export const plugin: PluginFunction = ( .concat(config.extraImports ?? []) .map((annotation) => `import ${annotation}`) .join("\n") + "\n"; - const typeDefinitions = visitorResult.definitions + const typeDefinitions = definitions .filter((d: unknown) => typeof d === "string" && d.length) .join("\n\n"); diff --git a/src/visitor.ts b/src/visitor.ts index b630109..4986af0 100644 --- a/src/visitor.ts +++ b/src/visitor.ts @@ -11,14 +11,9 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { - BaseVisitor, - ParsedConfig, - RawConfig, -} from "@graphql-codegen/visitor-plugin-common"; +import { BaseVisitor, RawConfig } from "@graphql-codegen/visitor-plugin-common"; import { EnumTypeDefinitionNode, - EnumValueDefinitionNode, GraphQLSchema, InterfaceTypeDefinitionNode, InputObjectTypeDefinitionNode, @@ -26,28 +21,21 @@ import { UnionTypeDefinitionNode, } from "graphql"; import { GraphQLKotlinCodegenConfig } from "./plugin"; -import { - buildEnumTypeDefinition, - buildEnumValueDefinition, -} from "./definitions/enum"; +import { buildEnumTypeDefinition } from "./definitions/enum"; import { buildInterfaceDefinition } from "./definitions/interface"; import { buildInputObjectDefinition } from "./definitions/input"; import { buildObjectTypeDefinition } from "./definitions/object"; import { buildUnionTypeDefinition } from "./definitions/union"; -export class KotlinResolversVisitor extends BaseVisitor< +export class KotlinVisitor extends BaseVisitor< RawConfig, - GraphQLKotlinCodegenConfig & ParsedConfig + GraphQLKotlinCodegenConfig > { constructor( rawConfig: GraphQLKotlinCodegenConfig, protected _schema: GraphQLSchema, ) { - super(rawConfig, rawConfig as GraphQLKotlinCodegenConfig & ParsedConfig); - } - - EnumValueDefinition(node: EnumValueDefinitionNode): string { - return buildEnumValueDefinition.bind(this)(node); + super(rawConfig, rawConfig); } EnumTypeDefinition(node: EnumTypeDefinitionNode): string { diff --git a/test/plugin.test.ts b/test/plugin.test.ts index 45cc555..ab1d934 100644 --- a/test/plugin.test.ts +++ b/test/plugin.test.ts @@ -49,8 +49,7 @@ const testCases = await Promise.all( } return { testName, - config: (await import(`${absolutePath}/codegen.config.ts`)) - .default as GraphQLKotlinCodegenConfig, + config: (await import(`${absolutePath}/codegen.config.ts`)).default, }; }), );