From 2d77cc1c49673e3f29ad2666339ae60b1e248ab5 Mon Sep 17 00:00:00 2001 From: "ADEBISI, Foluso A. (Dell-XPS)" Date: Wed, 27 May 2020 17:27:30 +0100 Subject: [PATCH] * Get query's operation name from vars, fixes #64 --- src/index.ts | 25 ++++++++++++++++++++----- src/types.ts | 4 ++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 91602fdab..6af5aae35 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,18 +1,31 @@ /// -import { ClientError, GraphQLError, Variables } from './types' +import { ClientError, GraphQLError, Variables, HasOperationNameKey } from './types' export { ClientError } from './types' export class GraphQLClient { private url: string - private options: RequestInit + private options: RequestInit & HasOperationNameKey - constructor(url: string, options?: RequestInit) { + constructor(url: string, options?: RequestInit & HasOperationNameKey) { this.url = url this.options = options || {} } + private extractOperationName(operationNameKey?: string, variables?: Variables) { + if (!operationNameKey) + operationNameKey = "__operation"; + + var operationName = variables ? variables[operationNameKey] : null; + if (operationName) { + // Cleanup operationNameKey from variables + delete (variables as any)[operationNameKey]; + return { operationName } + } + return null; + } + async rawRequest( query: string, variables?: Variables @@ -23,11 +36,12 @@ export class GraphQLClient { status: number errors?: GraphQLError[] }> { - const { headers, ...others } = this.options + const { headers, operationNameKey, ...others } = this.options const body = JSON.stringify({ query, variables: variables ? variables : undefined, + ...this.extractOperationName(operationNameKey, variables) }) const response = await fetch(this.url, { @@ -52,11 +66,12 @@ export class GraphQLClient { } async request(query: string, variables?: Variables): Promise { - const { headers, ...others } = this.options + const { headers, operationNameKey, ...others } = this.options const body = JSON.stringify({ query, variables: variables ? variables : undefined, + ...this.extractOperationName(operationNameKey, variables) }) const response = await fetch(this.url, { diff --git a/src/types.ts b/src/types.ts index e4f1987dc..ac6c4b537 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,9 @@ export type Variables = { [key: string]: any } +export interface HasOperationNameKey { + operationNameKey?: string; +} + export interface GraphQLError { message: string locations: { line: number; column: number }[]