Skip to content
This repository was archived by the owner on Dec 8, 2021. It is now read-only.

Commit 3b5baab

Browse files
author
Jason Kuhrt
authored
feat: allow disabling default resolvers (#437)
closes #350
1 parent ddf2b69 commit 3b5baab

File tree

11 files changed

+46
-21
lines changed

11 files changed

+46
-21
lines changed

docs/01-configuration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ The configuration file must be called **`graphqlgen.yml`**.
1414
- `resolver-scaffolding`: An object with two properties
1515
- `output`: Specifies where the scaffolded resolvers should be located. Must point to a **directory**.
1616
- `layout`: Specifies the [_layout_](#layouts) for the generated files. Possible values: `file-per-type` (more layouts [coming soon](https://github.com/prisma/graphqlgen/issues/106): `single-file`, `file-per-type-classes`, `single-file-classes`).
17+
- `default-resolvers`: A boolean dictating if default resolvers will be generated or not. Defaults to `true`.
1718

1819
Whether a property is required or not depends on whether you're doing [Generation](#generation) or [Scaffolding](#scaffolding).
1920

packages/graphqlgen-json-schema/src/definition.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export interface GraphQLGenDefinition {
55
models: Models
66
output: string
77
['resolver-scaffolding']?: ResolverScaffolding
8+
['default-resolvers']?: boolean
89
}
910

1011
export interface Models {

packages/graphqlgen/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"glob": "^7.1.3",
4545
"graphql": "^0.13.0 || ^14.0.0",
4646
"graphql-import": "0.7.1",
47-
"graphqlgen-json-schema": "0.2.12",
47+
"graphqlgen-json-schema": "0.6.0-rc3",
4848
"js-yaml": "3.12.1",
4949
"mkdirp": "0.5.1",
5050
"prettier": "1.16.2",

packages/graphqlgen/src/generators/flow/generator.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,11 @@ function renderNamespace(
171171

172172
return `\
173173
// Types for ${typeName}
174-
${renderDefaultResolvers(type, args, `${typeName}_defaultResolvers`)}
174+
${
175+
args.defaultResolversEnabled
176+
? renderDefaultResolvers(type, args, `${typeName}_defaultResolvers`)
177+
: ''
178+
}
175179
176180
${renderInputTypeInterfaces(
177181
type,

packages/graphqlgen/src/generators/flow/scaffolder.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,15 @@ function renderResolvers(
9292
const modelFields = fieldsFromModelDefinition(model.definition)
9393
const upperTypeName = upperFirst(type.name)
9494
const code = `/* @flow */
95-
import { ${upperTypeName}_defaultResolvers } from '[TEMPLATE-INTERFACES-PATH]'
95+
${
96+
args.defaultResolversEnabled
97+
? `import { ${upperTypeName}_defaultResolvers } from '[TEMPLATE-INTERFACES-PATH]'`
98+
: ''
99+
}
96100
import type { ${upperTypeName}_Resolvers } from '[TEMPLATE-INTERFACES-PATH]'
97101
98102
export const ${type.name}: ${upperTypeName}_Resolvers = {
99-
...${upperTypeName}_defaultResolvers,
103+
${args.defaultResolversEnabled ? `...${upperTypeName}_defaultResolvers,` : ''}
100104
${type.fields
101105
.filter(graphQLField =>
102106
shouldScaffoldFieldResolver(graphQLField, modelFields, args),

packages/graphqlgen/src/generators/typescript/generator.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,11 @@ function renderNamespace(
299299
return `\
300300
export namespace ${graphQLTypeObject.name}Resolvers {
301301
302-
${renderDefaultResolvers(graphQLTypeObject, args, 'defaultResolvers')}
302+
${
303+
args.defaultResolversEnabled
304+
? renderDefaultResolvers(graphQLTypeObject, args, 'defaultResolvers')
305+
: ''
306+
}
303307
304308
${renderInputTypeInterfaces(
305309
graphQLTypeObject,

packages/graphqlgen/src/generators/typescript/scaffolder.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ function renderResolvers(
2626
import { ${type.name}Resolvers } from '[TEMPLATE-INTERFACES-PATH]'
2727
2828
export const ${type.name}: ${type.name}Resolvers.Type = {
29-
...${type.name}Resolvers.defaultResolvers,
29+
${
30+
args.defaultResolversEnabled
31+
? `...${type.name}Resolvers.defaultResolvers,`
32+
: ''
33+
}
3034
${type.fields
3135
.filter(field => shouldScaffoldFieldResolver(field, modelFields, args))
3236
.map(
@@ -57,15 +61,22 @@ function renderPolyResolvers(
5761
return { path: `${type.name}.ts`, force: false, code }
5862
}
5963

60-
function renderParentResolvers(type: GraphQLTypeObject): CodeFileLike {
64+
function renderParentResolvers(
65+
type: GraphQLTypeObject,
66+
args: GenerateArgs,
67+
): CodeFileLike {
6168
const code = `\
6269
// This resolver file was scaffolded by github.com/prisma/graphqlgen, DO NOT EDIT.
6370
// Please do not import this file directly but copy & paste to your application code.
6471
6572
import { ${type.name}Resolvers } from '[TEMPLATE-INTERFACES-PATH]'
6673
6774
export const ${type.name}: ${type.name}Resolvers.Type = {
68-
...${type.name}Resolvers.defaultResolvers,
75+
${
76+
args.defaultResolversEnabled
77+
? `...${type.name}Resolvers.defaultResolvers,`
78+
: ''
79+
}
6980
${type.fields.map(field => {
7081
if (type.name === 'Subscription') {
7182
return `${field.name}: {
@@ -126,7 +137,7 @@ export function generate(args: GenerateArgs): CodeFileLike[] {
126137
args.types
127138
.filter(type => type.type.isObject)
128139
.filter(type => isParentType(type.name))
129-
.map(renderParentResolvers),
140+
.map(type => renderParentResolvers(type, args)),
130141
)
131142

132143
files.push({

packages/graphqlgen/src/index.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,23 @@ type CodeGenResult = {
9191
}
9292

9393
export function generateCode(codeGenArgs: CodeGenArgs): CodeGenResult {
94-
const { schema } = codeGenArgs
95-
9694
const generateArgs: GenerateArgs = {
97-
...schema,
95+
enums: codeGenArgs.schema.enums,
96+
interfaces: codeGenArgs.schema.interfaces,
97+
types: codeGenArgs.schema.types,
98+
unions: codeGenArgs.schema.unions,
99+
modelMap: codeGenArgs.modelMap!,
98100
context: parseContext(
99101
codeGenArgs.config.context,
100102
codeGenArgs.config.output,
101103
),
102-
modelMap: codeGenArgs.modelMap!,
104+
defaultResolversEnabled:
105+
typeof codeGenArgs.config['default-resolvers'] === 'boolean'
106+
? codeGenArgs.config['default-resolvers']
107+
: true,
103108
}
104109

105110
const generatedTypes = generateTypes(generateArgs, codeGenArgs)
106-
107111
const generatedResolvers = codeGenArgs.config['resolver-scaffolding']
108112
? generateResolvers(generateArgs, codeGenArgs)
109113
: undefined

packages/graphqlgen/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export interface GenerateArgs {
1414
unions: GraphQLUnionObject[]
1515
context?: ContextDefinition
1616
modelMap: ModelMap
17+
defaultResolversEnabled: boolean
1718
}
1819

1920
export interface ModelMap {

packages/graphqlgen/tests/generation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export async function testGeneration(config: GraphQLGenDefinition) {
137137
config.output,
138138
config.language,
139139
)
140-
const { generatedTypes, generatedResolvers } = generateCode({
140+
const { generatedTypes, generatedResolvers = [] } = generateCode({
141141
schema,
142142
language: config.language,
143143
config,

0 commit comments

Comments
 (0)