Mirror: The highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.

fix(graphcache): Use stringifyDocument in offlineExchange and support extensions (#3094)

Changed files
+14 -5
.changeset
exchanges
graphcache
+5
.changeset/giant-flies-exercise.md
···
···
+
---
+
'@urql/exchange-graphcache': patch
+
---
+
+
Use `stringifyDocument` in `offlineExchange` rather than `print` and serialize `operation.extensions` as needed.
+6 -3
exchanges/graphcache/src/offlineExchange.ts
···
import { pipe, merge, makeSubject, filter } from 'wonka';
-
import { print, SelectionNode } from 'graphql';
import {
Operation,
···
Exchange,
ExchangeIO,
CombinedError,
createRequest,
makeOperation,
} from '@urql/core';
···
const operation = failedQueue[i];
if (operation.kind === 'mutation') {
requests.push({
-
query: print(operation.query),
variables: operation.variables,
});
}
}
···
failedQueue.push(
client.createRequestOperation(
'mutation',
-
createRequest(mutations[i].query, mutations[i].variables)
)
);
}
···
import { pipe, merge, makeSubject, filter } from 'wonka';
+
import { SelectionNode } from 'graphql';
import {
Operation,
···
Exchange,
ExchangeIO,
CombinedError,
+
stringifyDocument,
createRequest,
makeOperation,
} from '@urql/core';
···
const operation = failedQueue[i];
if (operation.kind === 'mutation') {
requests.push({
+
query: stringifyDocument(operation.query),
variables: operation.variables,
+
extensions: operation.extensions,
});
}
}
···
failedQueue.push(
client.createRequestOperation(
'mutation',
+
createRequest(mutations[i].query, mutations[i].variables),
+
mutations[i].extensions
)
);
}
+3 -2
exchanges/graphcache/src/types.ts
···
-
import { AnyVariables, TypedDocumentNode } from '@urql/core';
import { GraphQLError, DocumentNode, FragmentDefinitionNode } from 'graphql';
import { IntrospectionData } from './ast';
···
/** A serialized GraphQL request for offline storage. */
export interface SerializedRequest {
query: string;
-
variables: AnyVariables;
}
/** Interface for a storage adapter, used by the {@link offlineExchange} for Offline Support.
···
+
import { AnyVariables, TypedDocumentNode, RequestExtensions } from '@urql/core';
import { GraphQLError, DocumentNode, FragmentDefinitionNode } from 'graphql';
import { IntrospectionData } from './ast';
···
/** A serialized GraphQL request for offline storage. */
export interface SerializedRequest {
query: string;
+
variables: AnyVariables | undefined;
+
extensions?: RequestExtensions | undefined;
}
/** Interface for a storage adapter, used by the {@link offlineExchange} for Offline Support.