Skip to content

Commit 1e58897

Browse files
chore: remove leftovers, integrate graph serializer
1 parent 942f3e5 commit 1e58897

File tree

5 files changed

+179
-150
lines changed

5 files changed

+179
-150
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface GqlEntrypointMetadata {
2+
key: string;
3+
parentType: string;
4+
}

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

Lines changed: 29 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,23 @@ import { Inject, Injectable, Logger } from '@nestjs/common';
22
import { isUndefined } from '@nestjs/common/utils/shared.utils';
33
import {
44
ContextIdFactory,
5-
createContextId,
65
MetadataScanner,
76
ModuleRef,
87
ModulesContainer,
98
REQUEST,
109
} from '@nestjs/core';
1110
import { ExternalContextCreator } from '@nestjs/core/helpers/external-context-creator';
1211
import { ParamMetadata } from '@nestjs/core/helpers/interfaces/params-metadata.interface';
13-
import { Injector } from '@nestjs/core/injector/injector';
1412
import { CONTROLLER_ID_KEY } from '@nestjs/core/injector/constants';
13+
import { Injector } from '@nestjs/core/injector/injector';
1514
import {
1615
ContextId,
1716
InstanceWrapper,
1817
} from '@nestjs/core/injector/instance-wrapper';
1918
import { InternalCoreModule } from '@nestjs/core/injector/internal-core-module';
2019
import { Module } from '@nestjs/core/injector/module';
20+
import { Entrypoint } from '@nestjs/core/inspector/interfaces/entrypoint.interface';
21+
import { SerializedGraph } from '@nestjs/core/inspector/serialized-graph';
2122
import { REQUEST_CONTEXT_ID } from '@nestjs/core/router/request/request-constants';
2223
import { GraphQLResolveInfo } from 'graphql';
2324
import { head, identity } from 'lodash';
@@ -35,21 +36,13 @@ import {
3536
SUBSCRIPTION_TYPE,
3637
} from '../graphql.constants';
3738
import { GqlModuleOptions } from '../interfaces';
39+
import { GqlEntrypointMetadata } from '../interfaces/gql-entrypoint-metadata.interface';
3840
import { ResolverMetadata } from '../interfaces/resolver-metadata.interface';
39-
import { getNumberOfArguments } from '../utils';
4041
import { decorateFieldResolverWithMiddleware } from '../utils/decorate-field-resolver.util';
4142
import { extractMetadata } from '../utils/extract-metadata.util';
4243
import { BaseExplorerService } from './base-explorer.service';
4344
import { GqlContextType } from './gql-execution-context';
4445

45-
// TODO remove in the next version (backward-compatibility layer)
46-
// "ContextIdFactory.getByRequest.length" returns an incorrent number
47-
// as parameters with default values do not count in.
48-
// @ref https://github.com/nestjs/graphql/pull/2214
49-
const getByRequestNumberOfArguments = getNumberOfArguments(
50-
ContextIdFactory.getByRequest,
51-
);
52-
5346
@Injectable()
5447
export class ResolversExplorerService extends BaseExplorerService {
5548
private readonly logger = new Logger(ResolversExplorerService.name);
@@ -63,6 +56,7 @@ export class ResolversExplorerService extends BaseExplorerService {
6356
@Inject(GRAPHQL_MODULE_OPTIONS)
6457
private readonly gqlOptions: GqlModuleOptions,
6558
private readonly moduleRef: ModuleRef,
59+
private readonly serializedGraph: SerializedGraph,
6660
) {
6761
super();
6862
}
@@ -113,6 +107,20 @@ export class ResolversExplorerService extends BaseExplorerService {
113107
.map((resolver) => {
114108
this.assignResolverConstructorUniqueId(instance.constructor, moduleRef);
115109

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+
};
121+
122+
this.serializedGraph.insertEntrypoint(entrypointDefinition, wrapper.id);
123+
116124
const createContext = (transform?: Function) =>
117125
this.createContextCallback(
118126
instance,
@@ -305,10 +313,7 @@ export class ResolversExplorerService extends BaseExplorerService {
305313
}
306314
const wrapper = coreModuleRef.getProviderByKey(REQUEST);
307315
wrapper.setInstanceByContextId(contextId, {
308-
// TODO: remove "as any" in the next major release (backward compatibility)
309-
instance: (contextId as any).getParent
310-
? (contextId as any).payload
311-
: request,
316+
instance: contextId.getParent ? contextId.payload : request,
312317
isResolved: true,
313318
});
314319
}
@@ -346,42 +351,16 @@ export class ResolversExplorerService extends BaseExplorerService {
346351
}
347352

348353
private getContextId(gqlContext: Record<string | symbol, any>): ContextId {
349-
if (getByRequestNumberOfArguments === 2) {
350-
const contextId = ContextIdFactory.getByRequest(gqlContext, ['req']);
351-
if (!gqlContext[REQUEST_CONTEXT_ID as any]) {
352-
Object.defineProperty(gqlContext, REQUEST_CONTEXT_ID, {
353-
value: contextId,
354-
enumerable: false,
355-
configurable: false,
356-
writable: false,
357-
});
358-
}
359-
return contextId;
360-
} else {
361-
// TODO remove in the next version (backward-compatibility layer)
362-
// Left for backward compatibility purposes
363-
let contextId: ContextId;
364-
365-
if (gqlContext && gqlContext[REQUEST_CONTEXT_ID]) {
366-
contextId = gqlContext[REQUEST_CONTEXT_ID];
367-
} else if (
368-
gqlContext &&
369-
gqlContext.req &&
370-
gqlContext.req[REQUEST_CONTEXT_ID]
371-
) {
372-
contextId = gqlContext.req[REQUEST_CONTEXT_ID];
373-
} else {
374-
contextId = createContextId();
375-
Object.defineProperty(gqlContext, REQUEST_CONTEXT_ID, {
376-
value: contextId,
377-
enumerable: false,
378-
configurable: false,
379-
writable: false,
380-
});
381-
}
382-
383-
return contextId;
354+
const contextId = ContextIdFactory.getByRequest(gqlContext, ['req']);
355+
if (!gqlContext[REQUEST_CONTEXT_ID as any]) {
356+
Object.defineProperty(gqlContext, REQUEST_CONTEXT_ID, {
357+
value: contextId,
358+
enumerable: false,
359+
configurable: false,
360+
writable: false,
361+
});
384362
}
363+
return contextId;
385364
}
386365

387366
private assignResolverConstructorUniqueId(

packages/graphql/package.json

Lines changed: 4 additions & 4 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.2.1",
39-
"@nestjs/core": "9.2.1",
38+
"@nestjs/common": "9.3.5",
39+
"@nestjs/core": "9.3.5",
4040
"@nestjs/testing": "8.4.7",
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.2.1",
48-
"@nestjs/core": "^9.2.1",
47+
"@nestjs/common": "^9.3.5",
48+
"@nestjs/core": "^9.3.5",
4949
"class-transformer": "*",
5050
"class-validator": "*",
5151
"graphql": "^16.6.0",

packages/mercurius/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
"devDependencies": {
3030
"@mercuriusjs/gateway": "^1.0.0",
3131
"@mercuriusjs/federation": "^1.0.0",
32-
"@nestjs/common": "9.2.1",
33-
"@nestjs/platform-fastify": "9.2.1",
32+
"@nestjs/common": "9.3.5",
33+
"@nestjs/platform-fastify": "9.3.5",
3434
"@nestjs/testing": "8.4.7",
3535
"fastify": "4.12.0",
3636
"mercurius": "12.0.0",
@@ -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.2.1",
43+
"@nestjs/common": "^9.3.5",
4444
"@nestjs/graphql": "^10.1.7",
4545
"fastify": "^4.12.0",
4646
"graphql": "^16.0.0",

0 commit comments

Comments
 (0)