Skip to content

Commit bfe3a2e

Browse files
fix: register resolver as an entry provider
1 parent ef15aba commit bfe3a2e

File tree

6 files changed

+114
-91
lines changed

6 files changed

+114
-91
lines changed

packages/apollo/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
"@apollo/subgraph": "2.2.3",
2727
"@apollo/server-plugin-response-cache": "4.1.0",
2828
"@as-integrations/fastify": "1.3.0",
29-
"@nestjs/common": "9.3.6",
30-
"@nestjs/core": "9.3.6",
31-
"@nestjs/platform-express": "9.3.6",
32-
"@nestjs/platform-fastify": "9.3.6",
33-
"@nestjs/testing": "9.3.6",
29+
"@nestjs/common": "9.3.8",
30+
"@nestjs/core": "9.3.8",
31+
"@nestjs/platform-express": "9.3.8",
32+
"@nestjs/platform-fastify": "9.3.8",
33+
"@nestjs/testing": "9.3.8",
3434
"apollo-cache-inmemory": "1.6.6",
3535
"apollo-client": "2.6.10",
3636
"apollo-link-ws": "1.0.20"
@@ -47,7 +47,7 @@
4747
"@apollo/subgraph": "^2.0.0",
4848
"@as-integrations/fastify": "^1.3.0",
4949
"@nestjs/common": "^9.0.0",
50-
"@nestjs/core": "^9.3.6",
50+
"@nestjs/core": "^9.3.8",
5151
"@nestjs/graphql": "^10.1.7",
5252
"graphql": "^16.6.0"
5353
},

packages/graphql/lib/decorators/resolver.decorator.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Type } from '@nestjs/common';
1+
import { SetMetadata, Type } from '@nestjs/common';
2+
import { ENTRY_PROVIDER_WATERMARK } from '@nestjs/common/constants';
23
import { isFunction, isString } from '@nestjs/common/utils/shared.utils';
34
import 'reflect-metadata';
45
import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage';
@@ -88,6 +89,10 @@ export function Resolver(
8889
key?: string | symbol,
8990
descriptor?: any,
9091
) => {
92+
if (typeof target === 'function') {
93+
SetMetadata(ENTRY_PROVIDER_WATERMARK, true)(target);
94+
}
95+
9196
const [nameOrType, resolverOptions] =
9297
typeof nameOrTypeOrOptions === 'object' && nameOrTypeOrOptions !== null
9398
? [undefined, nameOrTypeOrOptions]

packages/graphql/lib/services/resolvers-explorer.service.ts

Lines changed: 51 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -95,67 +95,64 @@ export class ResolversExplorerService extends BaseExplorerService {
9595
(type) => type === resolverType,
9696
));
9797

98-
const resolvers = this.metadataScanner.scanFromPrototype(
99-
instance,
100-
prototype,
101-
(name) => extractMetadata(instance, prototype, name, predicate),
102-
);
98+
const resolvers = this.metadataScanner
99+
.getAllMethodNames(prototype)
100+
.map((name) => extractMetadata(instance, prototype, name, predicate))
101+
.filter((resolver) => !!resolver);
103102

104103
const isRequestScoped = !wrapper.isDependencyTreeStatic();
105-
return resolvers
106-
.filter((resolver) => !!resolver)
107-
.map((resolver) => {
108-
this.assignResolverConstructorUniqueId(instance.constructor, moduleRef);
104+
return resolvers.map((resolver) => {
105+
this.assignResolverConstructorUniqueId(instance.constructor, moduleRef);
109106

110-
const entrypointDefinition: Entrypoint<GqlEntrypointMetadata> = {
111-
id: `${wrapper.id}_${resolver.methodName}`,
112-
type: 'graphql-entrypoint',
113-
methodName: resolver.methodName,
114-
className: wrapper.name,
115-
classNodeId: wrapper.id,
116-
metadata: {
117-
key: resolver.name,
118-
parentType: resolver.type,
119-
},
120-
};
107+
const entrypointDefinition: Entrypoint<GqlEntrypointMetadata> = {
108+
id: `${wrapper.id}_${resolver.methodName}`,
109+
type: 'graphql-entrypoint',
110+
methodName: resolver.methodName,
111+
className: wrapper.name,
112+
classNodeId: wrapper.id,
113+
metadata: {
114+
key: resolver.name,
115+
parentType: resolver.type,
116+
},
117+
};
121118

122-
this.serializedGraph.insertEntrypoint(entrypointDefinition, wrapper.id);
119+
this.serializedGraph.insertEntrypoint(entrypointDefinition, wrapper.id);
123120

124-
const createContext = (transform?: Function) =>
125-
this.createContextCallback(
126-
instance,
127-
prototype,
128-
wrapper,
129-
moduleRef,
130-
resolver,
131-
isRequestScoped,
132-
transform,
133-
);
134-
if (resolver.type === SUBSCRIPTION_TYPE) {
135-
if (!wrapper.isDependencyTreeStatic()) {
136-
// Note: We don't throw an exception here for backward
137-
// compatibility reasons.
138-
this.logger.error(
139-
`"${wrapper.metatype.name}" resolver is request or transient-scoped. Resolvers that register subscriptions with the "@Subscription()" decorator must be static (singleton).`,
140-
);
141-
}
142-
const subscriptionOptions = Reflect.getMetadata(
143-
SUBSCRIPTION_OPTIONS_METADATA,
144-
instance[resolver.methodName],
145-
);
146-
return this.createSubscriptionMetadata(
147-
gqlAdapter,
148-
createContext,
149-
subscriptionOptions,
150-
resolver,
151-
instance,
121+
const createContext = (transform?: Function) =>
122+
this.createContextCallback(
123+
instance,
124+
prototype,
125+
wrapper,
126+
moduleRef,
127+
resolver,
128+
isRequestScoped,
129+
transform,
130+
);
131+
if (resolver.type === SUBSCRIPTION_TYPE) {
132+
if (!wrapper.isDependencyTreeStatic()) {
133+
// Note: We don't throw an exception here for backward
134+
// compatibility reasons.
135+
this.logger.error(
136+
`"${wrapper.metatype.name}" resolver is request or transient-scoped. Resolvers that register subscriptions with the "@Subscription()" decorator must be static (singleton).`,
152137
);
153138
}
154-
return {
155-
...resolver,
156-
callback: createContext(),
157-
};
158-
});
139+
const subscriptionOptions = Reflect.getMetadata(
140+
SUBSCRIPTION_OPTIONS_METADATA,
141+
instance[resolver.methodName],
142+
);
143+
return this.createSubscriptionMetadata(
144+
gqlAdapter,
145+
createContext,
146+
subscriptionOptions,
147+
resolver,
148+
instance,
149+
);
150+
}
151+
return {
152+
...resolver,
153+
callback: createContext(),
154+
};
155+
});
159156
}
160157

161158
createContextCallback<T extends Record<string, any>>(

packages/graphql/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,17 @@
3535
},
3636
"devDependencies": {
3737
"@apollo/subgraph": "2.0.0",
38-
"@nestjs/common": "9.3.6",
39-
"@nestjs/core": "9.3.6",
40-
"@nestjs/testing": "9.3.6",
38+
"@nestjs/common": "9.3.8",
39+
"@nestjs/core": "9.3.8",
40+
"@nestjs/testing": "9.3.8",
4141
"graphql": "16.6.0",
4242
"reflect-metadata": "0.1.13",
4343
"ts-morph": "17.0.1"
4444
},
4545
"peerDependencies": {
4646
"@apollo/subgraph": "^2.0.0",
47-
"@nestjs/common": "^9.3.6",
48-
"@nestjs/core": "^9.3.6",
47+
"@nestjs/common": "^9.3.8",
48+
"@nestjs/core": "^9.3.8",
4949
"class-transformer": "*",
5050
"class-validator": "*",
5151
"graphql": "^16.6.0",

packages/mercurius/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
"devDependencies": {
3030
"@mercuriusjs/gateway": "^1.0.0",
3131
"@mercuriusjs/federation": "^1.0.0",
32-
"@nestjs/common": "9.3.6",
33-
"@nestjs/platform-fastify": "9.3.6",
34-
"@nestjs/testing": "9.3.6",
32+
"@nestjs/common": "9.3.8",
33+
"@nestjs/platform-fastify": "9.3.8",
34+
"@nestjs/testing": "9.3.8",
3535
"fastify": "4.12.0",
3636
"mercurius": "12.0.0",
3737
"mercurius-integration-testing": "6.0.1"
@@ -40,7 +40,7 @@
4040
"@apollo/subgraph": "^2.0.0",
4141
"@mercuriusjs/gateway": "^1.0.0",
4242
"@mercuriusjs/federation": "^1.0.0",
43-
"@nestjs/common": "^9.3.6",
43+
"@nestjs/common": "^9.3.8",
4444
"@nestjs/graphql": "^10.1.7",
4545
"fastify": "^4.12.0",
4646
"graphql": "^16.0.0",

yarn.lock

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1964,19 +1964,19 @@
19641964
secure-json-parse "^2.4.0"
19651965
ws "^8.2.2"
19661966

1967-
"@nestjs/[email protected].6":
1968-
version "9.3.6"
1969-
resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-9.3.6.tgz#be61508710c0aaf613e19c84e064797a7918171b"
1970-
integrity sha512-pPZwSEfLkMDUun6TXVmfAaohUEXLDbvOQPoIuj4n5Dc/L0czKmgfbK22XLVo5pJaEW1my9ifBTEo1bUgSrWBxw==
1967+
"@nestjs/[email protected].8":
1968+
version "9.3.8"
1969+
resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-9.3.8.tgz#7cc58ede3922b7b52c8f1615ac1ee051907cb03b"
1970+
integrity sha512-CM2+pSDvOrEXETCYciXQPYP9iCral3zu6GHbQkP1PKyyZDtvVsRNoVJ/zVFdmEUwsqvsV75X1VvyXt5w4OA1mg==
19711971
dependencies:
19721972
uid "2.0.1"
19731973
iterare "1.2.1"
19741974
tslib "2.5.0"
19751975

1976-
"@nestjs/[email protected].6":
1977-
version "9.3.6"
1978-
resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-9.3.6.tgz#e7a0cc6cc4ae00c9b4d650758cc624ba5457dea8"
1979-
integrity sha512-vWwgc8QaEGu5csSEnD5LiAXNKgeVR/rOvOev7BzSodAqvhOw4cmlr5UI1LijVgYDSr8hJjJmQUXkx8IU2m2gWw==
1976+
"@nestjs/[email protected].8":
1977+
version "9.3.8"
1978+
resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-9.3.8.tgz#7a0bccfdfc93cc8c7134409c9523a7ce6b0b21ec"
1979+
integrity sha512-LtKMF7qzlSN+B4lItxHc/r9IJTSgURZAT5LqMtZynmYDpIkkiG7UrKKx/jAolUF41SGkKXzC6Lh+yralZ97i5A==
19801980
dependencies:
19811981
uid "2.0.1"
19821982
"@nuxtjs/opencollective" "0.3.2"
@@ -1990,34 +1990,34 @@
19901990
resolved "https://registry.yarnpkg.com/@nestjs/mapped-types/-/mapped-types-1.2.2.tgz#d9ddb143776e309dbc1a518ac1607fddac1e140e"
19911991
integrity sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==
19921992

1993-
"@nestjs/[email protected].6":
1994-
version "9.3.6"
1995-
resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-9.3.6.tgz#1121068c314405c0eab3170a06ee99651e0647ad"
1996-
integrity sha512-zS7xZmB4DLvcFima9zliF4W5TXOcS/cCJjioWpcdPDh3tsdlhDCkEecrFLveBj1drYKr87snQ2cwrHK5E9DlxA==
1993+
"@nestjs/[email protected].8":
1994+
version "9.3.8"
1995+
resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-9.3.8.tgz#6f8166b8b3efe99c8a786bb0723ceaf4ce87d584"
1996+
integrity sha512-VY0tZbMPXyLypIm1FwpFC+xv0DR0RWx+M4baD9JiLmh+jdojm/blfzoFqVMRoZ33F9Q3iUjrQfSJOfgbbTiv5g==
19971997
dependencies:
19981998
body-parser "1.20.1"
19991999
cors "2.8.5"
20002000
express "4.18.2"
20012001
multer "1.4.4-lts.1"
20022002
tslib "2.5.0"
20032003

2004-
"@nestjs/[email protected].6":
2005-
version "9.3.6"
2006-
resolved "https://registry.yarnpkg.com/@nestjs/platform-fastify/-/platform-fastify-9.3.6.tgz#79317503a1aa22d29d9ad5e9e64f2c21a7969ea1"
2007-
integrity sha512-5ifOtTGp9TqPe2BvXDNLM0jMjK5WC8DyzflNgds+U+mrk4jVtFyMeT6szIoSP3INGRDtOLIkSg0FTf7mikdlPw==
2004+
"@nestjs/[email protected].8":
2005+
version "9.3.8"
2006+
resolved "https://registry.yarnpkg.com/@nestjs/platform-fastify/-/platform-fastify-9.3.8.tgz#7062a947c8856928d396863a5cf903878b4d3ac7"
2007+
integrity sha512-NCJXxK1cxwi06/Y4G20wWlMf7f41MVbucl0IOx0LYWli8zeKpv51OLty8KF2QLlNuRzYqCMoVBN/nC9KkZ+YaQ==
20082008
dependencies:
20092009
"@fastify/cors" "8.2.0"
20102010
"@fastify/formbody" "7.4.0"
20112011
"@fastify/middie" "8.1.0"
2012-
fastify "4.12.0"
2012+
fastify "4.13.0"
20132013
light-my-request "5.8.0"
20142014
path-to-regexp "3.2.0"
20152015
tslib "2.5.0"
20162016

2017-
"@nestjs/[email protected].6":
2018-
version "9.3.6"
2019-
resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-9.3.6.tgz#52d99b6d0353d5bceaa74a39f5e6d566e6f5d585"
2020-
integrity sha512-bfdw+x87gp2gZEKYnOqQn976ficHPaYgDcj7OCbfSzj31CWCo+sL+FuyhtbjpmvwtddtL+GuLDFyDrbH9UK72A==
2017+
"@nestjs/[email protected].8":
2018+
version "9.3.8"
2019+
resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-9.3.8.tgz#4f2d96dd5b6fadcd64075d68c870294d324b58eb"
2020+
integrity sha512-QyGOfrEOWbT8mi7ruYnh/taKuHDv4caAyf4WZ1YKkGn4tCeTKKNXSvV/y+NoO5o9Li/sLiq9B8EmleB1fxGajw==
20212021
dependencies:
20222022
tslib "2.5.0"
20232023

@@ -5101,6 +5101,27 @@ [email protected]:
51015101
semver "^7.3.7"
51025102
tiny-lru "^10.0.0"
51035103

5104+
5105+
version "4.13.0"
5106+
resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.13.0.tgz#5726d4c63acae1b5e34c7643e233a0be8169009a"
5107+
integrity sha512-p9ibdFWH3pZ7KPgmfHPKGUy2W4EWU2TEpwlcu58w4CwGyU3ARFfh2kwq6zpZ5W2ZGVbufi4tZbqHIHAlX/9Z/A==
5108+
dependencies:
5109+
"@fastify/ajv-compiler" "^3.3.1"
5110+
"@fastify/error" "^3.0.0"
5111+
"@fastify/fast-json-stringify-compiler" "^4.1.0"
5112+
abstract-logging "^2.0.1"
5113+
avvio "^8.2.0"
5114+
fast-content-type-parse "^1.0.0"
5115+
find-my-way "^7.3.0"
5116+
light-my-request "^5.6.1"
5117+
pino "^8.5.0"
5118+
process-warning "^2.0.0"
5119+
proxy-addr "^2.0.7"
5120+
rfdc "^1.3.0"
5121+
secure-json-parse "^2.5.0"
5122+
semver "^7.3.7"
5123+
tiny-lru "^10.0.0"
5124+
51045125
fastparallel@^2.3.0:
51055126
version "2.4.1"
51065127
resolved "https://registry.yarnpkg.com/fastparallel/-/fastparallel-2.4.1.tgz#0d984a5813ffa67f30b4a5cb4cb8cbe61c7ee5a5"

0 commit comments

Comments
 (0)