Skip to content

Commit 4c546f2

Browse files
feat(): log error if subscription is request-scoped
1 parent d44ff1c commit 4c546f2

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

lib/services/resolvers-explorer.service.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Inject, Injectable } from '@nestjs/common';
1+
import { Inject, Injectable, Logger } from '@nestjs/common';
22
import { isUndefined } from '@nestjs/common/utils/shared.utils';
33
import { REQUEST } from '@nestjs/core';
44
import { createContextId } from '@nestjs/core/helpers/context-id-factory';
@@ -37,6 +37,7 @@ import { GqlContextType } from './gql-execution-context';
3737

3838
@Injectable()
3939
export class ResolversExplorerService extends BaseExplorerService {
40+
private readonly logger = new Logger(ResolversExplorerService.name);
4041
private readonly gqlParamsFactory = new GqlParamsFactory();
4142
private readonly injector = new Injector();
4243

@@ -103,6 +104,13 @@ export class ResolversExplorerService extends BaseExplorerService {
103104
transform,
104105
);
105106
if (resolver.type === SUBSCRIPTION_TYPE) {
107+
if (!wrapper.isDependencyTreeStatic()) {
108+
// Note: We don't throw an exception here for backward
109+
// compatibility reasons.
110+
this.logger.error(
111+
`"${wrapper.metatype.name}" resolver is request or transient-scoped. Resolvers that register subscriptions with the "@Subscription()" decorator must be static (singleton).`,
112+
);
113+
}
106114
const subscriptionOptions = Reflect.getMetadata(
107115
SUBSCRIPTION_OPTIONS_METADATA,
108116
instance[resolver.methodName],
@@ -299,7 +307,7 @@ export class ResolversExplorerService extends BaseExplorerService {
299307
TSource extends object = any,
300308
TContext = {},
301309
TArgs = { [argName: string]: any },
302-
TOutput = any
310+
TOutput = any,
303311
>(resolverFn: Function, instance: object, methodKey: string) {
304312
const fieldMiddleware = Reflect.getMetadata(
305313
FIELD_RESOLVER_MIDDLEWARE_METADATA,
@@ -314,9 +322,10 @@ export class ResolversExplorerService extends BaseExplorerService {
314322
return resolverFn;
315323
}
316324

317-
const originalResolveFnFactory = (
318-
...args: [TSource, TArgs, TContext, GraphQLResolveInfo]
319-
) => () => resolverFn(...args);
325+
const originalResolveFnFactory =
326+
(...args: [TSource, TArgs, TContext, GraphQLResolveInfo]) =>
327+
() =>
328+
resolverFn(...args);
320329

321330
return decorateFieldResolverWithMiddleware<
322331
TSource,

0 commit comments

Comments
 (0)