diff --git a/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts b/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts index 05d3fc349ba..90a6cf4db42 100644 --- a/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts +++ b/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts @@ -278,6 +278,7 @@ export interface RawResolversConfig extends RawConfig { * inputValue: true * object: true * defaultValue: true + * resolvers: true; * ``` */ avoidOptionals?: boolean | AvoidOptionalsConfig; @@ -370,6 +371,22 @@ export interface RawResolversConfig extends RawConfig { * @ignore */ directiveResolverMappings?: Record; + /** + * @description Allow you to set the visitor class that will be used to traverse the graphql AST to generate + * the types. + * + * + * @exampleMarkdown + * + * ## Custom Visitor + * + * ```yaml + * plugins + * config: + * customVisitor: ./my-custom-visitor#VisitorClass + * ``` + * **/ + customVisitor?: string; } export type ResolverTypes = { [gqlType: string]: string }; @@ -431,6 +448,7 @@ export class BaseResolversVisitor< mappers: transformMappers(rawConfig.mappers || {}, rawConfig.mapperTypeSuffix), scalars: buildScalarsFromConfig(_schema, rawConfig, defaultScalars), internalResolversPrefix: getConfigValue(rawConfig.internalResolversPrefix, '__'), + customVisitor: getConfigValue(rawConfig.customVisitor, null), // If custom visitor is not set, we will use the default one ...additionalConfig, } as TPluginConfig); diff --git a/packages/plugins/typescript/resolvers/src/index.ts b/packages/plugins/typescript/resolvers/src/index.ts index 93a2d5d1eb2..1bcba57c046 100644 --- a/packages/plugins/typescript/resolvers/src/index.ts +++ b/packages/plugins/typescript/resolvers/src/index.ts @@ -76,7 +76,18 @@ export type Resolver${capitalizedDirectiveName}WithResolve