| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import { ArgumentsHost, ExecutionContext } from '@nestjs/common';
- import { GqlExecutionContext } from '@nestjs/graphql';
- import { Request, Response } from 'express';
- import { GraphQLResolveInfo } from 'graphql';
- export type RestContext = { req: Request; res: Response; isGraphQL: false; info: undefined };
- export type GraphQLContext = {
- req: Request;
- res: Response;
- isGraphQL: true;
- info: GraphQLResolveInfo;
- };
- /**
- * Parses in the Nest ExecutionContext of the incoming request, accounting for both
- * GraphQL & REST requests.
- */
- export function parseContext(context: ExecutionContext | ArgumentsHost): RestContext | GraphQLContext {
- // TODO: Remove this check once this issue is resolved: https://github.com/nestjs/graphql/pull/1469
- if ((context as ExecutionContext).getHandler?.()?.name === '__resolveType') {
- return {
- req: context.getArgs()[1].req,
- res: context.getArgs()[1].res,
- isGraphQL: false,
- info: undefined,
- };
- }
- const graphQlContext = GqlExecutionContext.create(context as ExecutionContext);
- const info = graphQlContext.getInfo();
- let req: Request;
- let res: Response;
- if (info) {
- const ctx = graphQlContext.getContext();
- req = ctx.req;
- res = ctx.res;
- } else {
- req = context.switchToHttp().getRequest();
- res = context.switchToHttp().getResponse();
- }
- return {
- req,
- res,
- info,
- isGraphQL: !!info,
- };
- }
|