Skip to content

Commit bfd938e

Browse files
committed
fix(@nestjs/graphql): set unique ids on resolvers to fix cache errors
The resolver metadata cache currently uses the resolver name for the key but this causes issues if we have two resolvers in different modules but with the same name and identical method signatures. For controllers, each controller gets a unique ID that is used as the key in the cache. Add code to set up unique IDs for resolvers as well so that cache retrieval is correct. Fixes #1907
1 parent b044b61 commit bfd938e

27 files changed

+420
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { ApolloDriver } from '@nestjs/apollo';
2+
import { Module } from '@nestjs/common';
3+
import { GraphQLModule } from '@nestjs/graphql';
4+
import { ModuleAModule } from './module-a/module-a.module';
5+
import { ModuleBModule } from './module-b/module-b.module';
6+
import { QueryResolver } from './query.resolver';
7+
8+
@Module({
9+
imports: [
10+
GraphQLModule.forRoot({
11+
driver: ApolloDriver,
12+
autoSchemaFile: true,
13+
}),
14+
ModuleAModule,
15+
ModuleBModule,
16+
QueryResolver,
17+
],
18+
controllers: [],
19+
providers: [],
20+
})
21+
export class AppModule {}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Module } from '@nestjs/common';
2+
import { UserResolver } from './user.resolver';
3+
4+
@Module({
5+
imports: [],
6+
controllers: [],
7+
providers: [UserResolver],
8+
})
9+
export class ModuleAModule {}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Args, Mutation, Resolver } from '@nestjs/graphql';
2+
3+
@Resolver()
4+
export class UserResolver {
5+
@Mutation(() => String, { name: 'moduleALogin' })
6+
login(@Args('code') code: string) {
7+
return code;
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Module } from '@nestjs/common';
2+
import { UserResolver } from './user.resolver';
3+
4+
@Module({
5+
imports: [],
6+
controllers: [],
7+
providers: [UserResolver],
8+
})
9+
export class ModuleBModule {}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Args, Mutation, Resolver } from '@nestjs/graphql';
2+
3+
@Resolver()
4+
export class UserResolver {
5+
@Mutation(() => String, { name: 'moduleBLogin' })
6+
login(@Args('username') username: string) {
7+
return username;
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
2+
3+
@Resolver()
4+
export class QueryResolver {
5+
@Query(() => Boolean, { name: '_' })
6+
test() {
7+
return true;
8+
}
9+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { ApolloDriver } from '@nestjs/apollo';
2+
import { Module } from '@nestjs/common';
3+
import { GraphQLModule } from '@nestjs/graphql';
4+
import { join } from 'path';
5+
import { ModuleAModule } from './module-a/module-a.module';
6+
import { ModuleBModule } from './module-b/module-b.module';
7+
8+
@Module({
9+
imports: [
10+
GraphQLModule.forRoot({
11+
driver: ApolloDriver,
12+
typePaths: [join(__dirname, '*.graphql')],
13+
}),
14+
ModuleAModule,
15+
ModuleBModule,
16+
],
17+
controllers: [],
18+
providers: [],
19+
})
20+
export class AppModule {}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
type Query {
2+
_: Boolean
3+
}
4+
5+
type Mutation {
6+
moduleALogin(code: String): String
7+
moduleBLogin(username: String): String
8+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Module } from '@nestjs/common';
2+
import { UserResolver } from './user.resolver';
3+
4+
@Module({
5+
imports: [],
6+
controllers: [],
7+
providers: [UserResolver],
8+
})
9+
export class ModuleAModule {}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Args, Mutation, Resolver } from '@nestjs/graphql';
2+
3+
@Resolver()
4+
export class UserResolver {
5+
@Mutation('moduleALogin')
6+
login(@Args('code') code: string) {
7+
return code;
8+
}
9+
}

0 commit comments

Comments
 (0)