Skip to content

Commit 86132d4

Browse files
authored
refactor: use graphql visitor (#8)
1 parent 9ed59e2 commit 86132d4

File tree

4 files changed

+27
-38
lines changed

4 files changed

+27
-38
lines changed

src/definitions/enum.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ limitations under the License.
1414
import { EnumTypeDefinitionNode, EnumValueDefinitionNode } from "graphql";
1515
import { indentMultiline } from "@graphql-codegen/visitor-plugin-common";
1616
import { buildAnnotations } from "../helpers/build-annotations";
17-
import { KotlinResolversVisitor } from "../visitor";
1817
import { shouldIncludeTypeDefinition } from "../helpers/should-include-type-definition";
1918
import { GraphQLKotlinCodegenConfig } from "../plugin";
2019

@@ -27,14 +26,17 @@ export function buildEnumTypeDefinition(
2726
}
2827

2928
const enumName = node.name.value;
30-
const enumValues = indentMultiline((node.values ?? []).join(",\n") + ";", 2);
29+
const enumValues =
30+
node.values?.map((valueNode) => {
31+
return buildEnumValueDefinition(valueNode, config);
32+
}) ?? [];
3133

3234
const annotations = buildAnnotations({
3335
config,
3436
definitionNode: node,
3537
});
3638
return `${annotations}enum class ${enumName}(val label: String) {
37-
${enumValues}
39+
${indentMultiline(enumValues.join(",\n") + ";", 2)}
3840
3941
companion object {
4042
@JvmStatic
@@ -45,16 +47,13 @@ ${enumValues}
4547
}`;
4648
}
4749

48-
export function buildEnumValueDefinition(
49-
this: KotlinResolversVisitor,
50+
function buildEnumValueDefinition(
5051
node: EnumValueDefinitionNode,
52+
config: GraphQLKotlinCodegenConfig,
5153
) {
5254
const annotations = buildAnnotations({
53-
config: this.config,
55+
config,
5456
definitionNode: node,
5557
});
56-
return `${annotations}${this.convertName(node, {
57-
useTypesPrefix: false,
58-
transformUnderscore: true,
59-
})}("${node.name.value}")`;
58+
return `${annotations}${config.convert(node)}("${node.name.value}")`;
6059
}

src/plugin.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,22 @@ limitations under the License.
1414
import { dirname, normalize } from "path";
1515
import {
1616
getCachedDocumentNodeFromSchema,
17-
oldVisit,
1817
PluginFunction,
1918
} from "@graphql-codegen/plugin-helpers";
2019
import { buildPackageNameFromPath } from "@graphql-codegen/java-common";
21-
import { KotlinResolversVisitor } from "./visitor";
22-
import { RawConfig } from "@graphql-codegen/visitor-plugin-common";
20+
import { KotlinVisitor } from "./visitor";
21+
import {
22+
ParsedConfig,
23+
RawConfig,
24+
} from "@graphql-codegen/visitor-plugin-common";
2325
import { Input, safeParse } from "valibot";
2426
import { configSchema } from "./config";
2527
import { addDependentTypes } from "./helpers/add-dependent-types";
28+
import { visit } from "graphql";
2629

27-
export type GraphQLKotlinCodegenConfig = RawConfig & Input<typeof configSchema>;
30+
export type GraphQLKotlinCodegenConfig = RawConfig &
31+
ParsedConfig &
32+
Input<typeof configSchema>;
2833
export const plugin: PluginFunction<GraphQLKotlinCodegenConfig> = (
2934
schema,
3035
_,
@@ -48,11 +53,9 @@ export const plugin: PluginFunction<GraphQLKotlinCodegenConfig> = (
4853
}
4954

5055
addDependentTypes(config, schema);
51-
const visitor = new KotlinResolversVisitor(config, schema);
56+
const visitor = new KotlinVisitor(config, schema);
5257
const astNode = getCachedDocumentNodeFromSchema(schema);
53-
const visitorResult: { definitions: unknown[] } = oldVisit(astNode, {
54-
leave: visitor as Parameters<typeof oldVisit>[1]["leave"],
55-
});
58+
const { definitions } = visit(astNode, visitor);
5659
const packageName = `package ${
5760
config.packageName ?? buildPackageNameFromPath(relevantPath)
5861
}\n`;
@@ -62,7 +65,7 @@ export const plugin: PluginFunction<GraphQLKotlinCodegenConfig> = (
6265
.concat(config.extraImports ?? [])
6366
.map((annotation) => `import ${annotation}`)
6467
.join("\n") + "\n";
65-
const typeDefinitions = visitorResult.definitions
68+
const typeDefinitions = definitions
6669
.filter((d: unknown) => typeof d === "string" && d.length)
6770
.join("\n\n");
6871

src/visitor.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,43 +11,31 @@ See the License for the specific language governing permissions and
1111
limitations under the License.
1212
*/
1313

14-
import {
15-
BaseVisitor,
16-
ParsedConfig,
17-
RawConfig,
18-
} from "@graphql-codegen/visitor-plugin-common";
14+
import { BaseVisitor, RawConfig } from "@graphql-codegen/visitor-plugin-common";
1915
import {
2016
EnumTypeDefinitionNode,
21-
EnumValueDefinitionNode,
2217
GraphQLSchema,
2318
InterfaceTypeDefinitionNode,
2419
InputObjectTypeDefinitionNode,
2520
ObjectTypeDefinitionNode,
2621
UnionTypeDefinitionNode,
2722
} from "graphql";
2823
import { GraphQLKotlinCodegenConfig } from "./plugin";
29-
import {
30-
buildEnumTypeDefinition,
31-
buildEnumValueDefinition,
32-
} from "./definitions/enum";
24+
import { buildEnumTypeDefinition } from "./definitions/enum";
3325
import { buildInterfaceDefinition } from "./definitions/interface";
3426
import { buildInputObjectDefinition } from "./definitions/input";
3527
import { buildObjectTypeDefinition } from "./definitions/object";
3628
import { buildUnionTypeDefinition } from "./definitions/union";
3729

38-
export class KotlinResolversVisitor extends BaseVisitor<
30+
export class KotlinVisitor extends BaseVisitor<
3931
RawConfig,
40-
GraphQLKotlinCodegenConfig & ParsedConfig
32+
GraphQLKotlinCodegenConfig
4133
> {
4234
constructor(
4335
rawConfig: GraphQLKotlinCodegenConfig,
4436
protected _schema: GraphQLSchema,
4537
) {
46-
super(rawConfig, rawConfig as GraphQLKotlinCodegenConfig & ParsedConfig);
47-
}
48-
49-
EnumValueDefinition(node: EnumValueDefinitionNode): string {
50-
return buildEnumValueDefinition.bind(this)(node);
38+
super(rawConfig, rawConfig);
5139
}
5240

5341
EnumTypeDefinition(node: EnumTypeDefinitionNode): string {

test/plugin.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ const testCases = await Promise.all(
4949
}
5050
return {
5151
testName,
52-
config: (await import(`${absolutePath}/codegen.config.ts`))
53-
.default as GraphQLKotlinCodegenConfig,
52+
config: (await import(`${absolutePath}/codegen.config.ts`)).default,
5453
};
5554
}),
5655
);

0 commit comments

Comments
 (0)