Skip to content
This repository has been archived by the owner on Dec 10, 2024. It is now read-only.

Commit

Permalink
feat(nuxt): add graphqlYoga codegen config
Browse files Browse the repository at this point in the history
  • Loading branch information
productdevbook committed Jan 28, 2024
1 parent 702a32d commit 98c971f
Show file tree
Hide file tree
Showing 8 changed files with 194 additions and 91 deletions.
1 change: 1 addition & 0 deletions packages/graphql/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
"@graphql-tools/graphql-file-loader": "^8.0.0",
"@graphql-tools/load": "^8.0.1",
"@graphql-tools/schema": "^10.0.2",
"@graphql-tools/utils": "^10.0.13",
"graphql": "^16.8.1",
"graphql-relay": "^0.10.0",
"graphql-yoga": "^5.1.0",
Expand Down
4 changes: 4 additions & 0 deletions packages/nuxt/src/runtime/core/setupModules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,15 @@ async function initModules(nuxt: Nuxt) {
_dir: {
module: join(projectName, moduleName),
server: join(nuxt._pergel.dir.server, `${moduleName}-${projectName}`),
build: join('.nuxt', 'pergel', projectName, moduleName),
},
moduleName: moduleName as PergelModuleNames,
projectName,
rootModuleDir: join(nuxt._pergel.rootDir, `${moduleName}-${projectName}`),
serverDir: join(nuxt._pergel.serverDir, `${moduleName}-${projectName}`),
projectNameCamelCase: camelCase(projectName, { normalize: true }),
projectNameCamelCaseWithPergel: camelCase(`pergel-${projectName}`, { normalize: true }),
buildDir: join(nuxt.options.buildDir, 'pergel', projectName, moduleName),
},
rootOptions: module,
})
Expand Down Expand Up @@ -257,13 +259,15 @@ export async function setupModules(data: {
_dir: {
module: join(projectName, moduleName),
server: join(data.nuxt._pergel.serverDir, `${moduleName}-${projectName}`),
build: join('.nuxt', 'pergel', projectName, moduleName),
},
moduleName: moduleName as PergelModuleNames,
projectName,
rootModuleDir: join(data.nuxt._pergel.rootDir, `${moduleName}-${projectName}`),
serverDir: join(data.nuxt._pergel.serverDir, `${moduleName}-${projectName}`),
projectNameCamelCase: camelCase(projectName, { normalize: true }),
projectNameCamelCaseWithPergel: camelCase(`pergel-${projectName}`, { normalize: true }),
buildDir: join(data.nuxt.options.buildDir, 'pergel', projectName, moduleName),
},
rootOptions: module,
})
Expand Down
6 changes: 6 additions & 0 deletions packages/nuxt/src/runtime/core/types/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ export interface ResolvedPergelModuleOptions {
*/
serverDir: string

/** @default "/<rootDir>/.nuxt/pergel/${projectName}/${moduleName}" */
buildDir: string

/**
* ModuleDir
*/
Expand All @@ -69,6 +72,9 @@ export interface ResolvedPergelModuleOptions {
* 'server/${moduleName}-${projectName}'
*/
server: string

/** @default '.nuxt/pergel/${projectName}/${moduleName}' */
build: string
}

[key: string]: any
Expand Down
2 changes: 2 additions & 0 deletions packages/nuxt/src/runtime/modules/graphqlYoga/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,13 @@ export default definePergelModule<GraphQLYogaConfig, ResolvedGraphQLYogaConfig>(
extension: '.graphql',
onlyDevelopment: true,
configFilePath: clientConfigFile,
config: undefined,
},
server: {
extension: '.graphql',
onlyDevelopment: true,
configFilePath: serverConfigFile,
config: undefined,
},
},
endpoint: '/api/graphql',
Expand Down
79 changes: 79 additions & 0 deletions packages/nuxt/src/runtime/modules/graphqlYoga/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type { H3Error, H3Event } from 'h3'

import type { EmbeddableSandboxOptions } from '@apollo/sandbox/src/EmbeddedSandbox'
import type { PergelModuleOptions, ResolvedPergelModuleOptions } from '../../core/types/module'
import type { CodegenClientConfig, CodegenServerConfig } from './utils/codegen'

export interface GraphqlYogaHandleOptions {
context: {
Expand Down Expand Up @@ -139,6 +140,28 @@ export interface GraphQLYogaConfig extends PergelModuleOptions {
* @default '.graphql'
*/
extension?: '.graphql' | '.gql'

/**
* Codegen config
* @default undefined
*/
config?: (args: {
dir: {
/**
* server/graphqlYoga-{projectName}
*/
module: string

/**
* server
*/
server: string
/**
* .nuxt/pergel/${projectName}/graphqlYoga
*/
nuxtModule: string
}
}) => CodegenServerConfig
}

/**
Expand All @@ -163,6 +186,28 @@ export interface GraphQLYogaConfig extends PergelModuleOptions {
* @default '.graphql'
*/
extension?: '.graphql' | '.gql'

/**
* Codegen config
* @default undefined
*/
config?: (args: {
dir: {
/**
* server/graphqlYoga-{projectName}
*/
module: string

/**
* server
*/
server: string
/**
* .nuxt/pergel/${projectName}/graphqlYoga
*/
nuxtModule: string
}
}) => CodegenClientConfig
}
}
}
Expand Down Expand Up @@ -201,11 +246,45 @@ export interface ResolvedGraphQLYogaConfig extends GraphQLYogaConfig, ResolvedPe
configFilePath: string
onlyDevelopment: boolean
extension: '.graphql' | '.gql'
config?: (args: {
dir: {
/**
* server/graphqlYoga-{projectName}
*/
module: string

/**
* server
*/
server: string
/**
* .nuxt/pergel/${projectName}/graphqlYoga
*/
nuxtModule: string
}
}) => CodegenServerConfig
}
client: {
configFilePath: string
onlyDevelopment: boolean
extension: '.graphql' | '.gql'
config?: (args: {
dir: {
/**
* server/graphqlYoga-{projectName}
*/
module: string

/**
* server
*/
server: string
/**
* .nuxt/pergel/${projectName}/graphqlYoga
*/
nuxtModule: string
}
}) => CodegenClientConfig
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,15 @@ export async function useGenerateCodegen({
const type = await server.typescriptResolvers(schema, {
useTypeImports: true,
contextType: `${moduleDTS.path}#${moduleDTS.name}`,
...typeof options.codegen.server.config === 'function'
? options.codegen.server.config({
dir: {
module: options.serverDir,
server: nuxt.options.serverDir,
nuxtModule: options.buildDir,
},
})
: {},
})
return type
}
Expand Down Expand Up @@ -166,6 +175,15 @@ export async function useGenerateCodegen({
if (loadDocument) {
const data = await client.generateTypedDocumentNode(schema, loadDocument, {
useTypeImports: true,
...typeof options.codegen.client.config === 'function'
? options.codegen.client.config({
dir: {
module: options.serverDir,
server: nuxt.options.serverDir,
nuxtModule: options.buildDir,
},
})
: {},
})
return data
}
Expand Down
Loading

0 comments on commit 98c971f

Please sign in to comment.