@gluonjs/core / packages/graphql/src / createContentfulGraphQLFetcher
Function: createContentfulGraphQLFetcher()
createContentfulGraphQLFetcher<
TData,TVariables>(options):GraphQLFetcher<TData,TVariables>
Type Parameters
TData
TData
TVariables
TVariables = Readonly<Record<string, unknown>>
Parameters
options
ContentfulGraphQLFetcherOptions
Returns
GraphQLFetcher<TData, TVariables>
Example
Configure a server-owned Contentful GraphQL Delivery or Preview fetcher:
ts
import {
GraphQLRequestError,
GraphQLTimeoutError,
createContentfulGraphQLFetcher,
createFetchGraphQLFetcher,
createGraphQLResource,
createGraphQLResourceContext,
hydrateGraphQLResourceState,
parseGraphQLResourceState,
serializeGraphQLResourceState,
snapshotGraphQLResourceState,
type ContentfulGraphQLFetcherOptions,
type FetchGraphQLFetcherOptions,
type GraphQLErrorLike,
type GraphQLDocument,
type GraphQLFetchRequest,
type GraphQLFetcher,
type GraphQLRequestOptions,
type GraphQLResource,
type GraphQLResourceContext,
type GraphQLResourceContextOptions,
type GraphQLResourceOptions,
type GraphQLResourceSnapshot,
type GraphQLResourceSnapshotEntry,
type GraphQLResponse,
type GraphQLVariables,
} from '@gluonjs/graphql';
type Product = { id: string; title: string };
type Reference = { id: string };
const document: GraphQLDocument = 'query Product($id: ID!) { product(id: $id) { id title } }';
const variables: GraphQLVariables = { id: '4711' };
const typedVariables: Reference = { id: '4711' };
const response: GraphQLResponse<Product> = { data: { id: '4711', title: 'Desk lamp' } };
const errors: readonly GraphQLErrorLike[] = [{ message: 'Unavailable' }];
const fetchOptions: FetchGraphQLFetcherOptions = { endpoint: 'https://example.test/graphql' };
const fetcher: GraphQLFetcher<Product, Reference> = createFetchGraphQLFetcher(fetchOptions);
const resourceOptions: GraphQLResourceOptions<Reference, Product, Reference> = { key: ({ id }) => `product:${id}`, query: document, variables: ({ id }) => ({ id }), fetcher };
const contextOptions: GraphQLResourceContextOptions = {};
const context: GraphQLResourceContext = createGraphQLResourceContext(contextOptions);
const resource: GraphQLResource<Reference, Product> = createGraphQLResource(resourceOptions);
const requestOptions: GraphQLRequestOptions = { context };
const request: GraphQLFetchRequest<Reference> = { document, query: String(document), variables: typedVariables, signal: new AbortController().signal };
const snapshotEntry: GraphQLResourceSnapshotEntry = { key: 'product:4711', data: response.data };
const snapshot: GraphQLResourceSnapshot = { version: 1, resources: [snapshotEntry] };
const contentfulOptions: ContentfulGraphQLFetcherOptions = { space: 'space', accessToken: 'server-token', preview: false, locale: 'en-US' };
const contentful = createContentfulGraphQLFetcher<Product, Reference>(contentfulOptions);
const httpError = new GraphQLRequestError('Unavailable', { code: 'GRAPHQL_HTTP_ERROR', status: 503, errors });
const timeoutError = new GraphQLTimeoutError(1000);
const loaded = resource.peek({ id: '4711' }, context);
void [request, variables, response, errors, requestOptions, resource, context, snapshot, contentful, httpError, timeoutError, loaded, resource.read({ id: '4711' }, requestOptions), resource.prefetch({ id: '4711' }, requestOptions), resource.invalidate({ id: '4711' }, context), serializeGraphQLResourceState(context), snapshotGraphQLResourceState(context), parseGraphQLResourceState(JSON.stringify(snapshot)), hydrateGraphQLResourceState(context, snapshot)];