Skip to content

Commit 9a078cf

Browse files
korsvanloonblurrah
authored andcommitted
fix: add proper string serialization of query
1 parent 85feb71 commit 9a078cf

File tree

3 files changed

+18
-12
lines changed

3 files changed

+18
-12
lines changed

.changeset/spicy-keys-cheat.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@labdigital/graphql-fetcher": patch
3+
---
4+
5+
Fix string serialization of query

src/client.ts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import {
1010
hasPersistedQueryError,
1111
mergeHeaders,
1212
} from "./helpers";
13+
import { print } from "graphql/language/printer";
14+
import { ASTNode } from "graphql";
1315

1416
type Options = {
1517
/**
@@ -26,16 +28,15 @@ type Options = {
2628
defaultTimeout?: number;
2729
};
2830

29-
3031
type RequestOptions = {
3132
signal?: AbortSignal;
3233
headers?: Headers | Record<string, string>;
33-
}
34+
};
3435

3536
export type ClientFetcher = <TResponse, TVariables>(
3637
astNode: DocumentTypeDecoration<TResponse, TVariables>,
3738
variables?: TVariables,
38-
options?: RequestOptions | AbortSignal // Backwards compatibility
39+
options?: RequestOptions | AbortSignal // Backwards compatibility
3940
) => Promise<GqlResponse<TResponse>>;
4041

4142
export const initClientFetcher =
@@ -53,25 +54,23 @@ export const initClientFetcher =
5354
astNode: DocumentTypeDecoration<TResponse, TVariables>,
5455
variables?: TVariables,
5556
optionsOrSignal: RequestOptions | AbortSignal = {
56-
signal: AbortSignal.timeout(defaultTimeout)
57+
signal: AbortSignal.timeout(defaultTimeout),
5758
} satisfies RequestOptions
5859
): Promise<GqlResponse<TResponse>> => {
59-
6060
// For backwards compatibility, when options is an AbortSignal we transform
6161
// it into a RequestOptions object
62-
const options: RequestOptions = {}
62+
const options: RequestOptions = {};
6363
if (optionsOrSignal instanceof AbortSignal) {
64-
options.signal = optionsOrSignal
64+
options.signal = optionsOrSignal;
6565
} else {
66-
Object.assign(options, optionsOrSignal)
66+
Object.assign(options, optionsOrSignal);
6767
}
6868

6969
// Make sure that we always have a default signal set
7070
if (!options.signal) {
7171
options.signal = AbortSignal.timeout(defaultTimeout);
7272
}
73-
74-
const query = astNode.toString();
73+
const query = print(astNode as ASTNode);
7574
const operationName = extractOperationName(query);
7675

7776
let hash = "";
@@ -92,7 +91,7 @@ export const initClientFetcher =
9291

9392
let response: GqlResponse<TResponse> | undefined = undefined;
9493

95-
const headers = mergeHeaders(options.headers)
94+
const headers = mergeHeaders(options.headers);
9695

9796
// For queries we can use GET requests if persisted queries are enabled
9897
if (persistedQueries && getQueryType(query) === "query") {

src/server.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import {
1111
getQueryType,
1212
pruneObject,
1313
} from "./helpers";
14+
import { print } from "graphql/language/printer";
15+
import { ASTNode } from "graphql";
1416

1517
type Options = {
1618
/**
@@ -49,7 +51,7 @@ export const initServerFetcher =
4951
{ cache, next = {} }: CacheOptions,
5052
signal: AbortSignal = AbortSignal.timeout(defaultTimeout)
5153
): Promise<GqlResponse<TResponse>> => {
52-
const query = astNode.toString();
54+
const query = print(astNode as ASTNode);
5355
const operationName = extractOperationName(query) || "(GraphQL)";
5456

5557
if (dangerouslyDisableCache) {

0 commit comments

Comments
 (0)