A super-lightweight GraphQL client built on cross-fetch. As few dependencies as possible, works in the browser and server. Specifically built to work with strings and avoid a dependency on graphql
/ graphql-tag
so you can keep your codebase light. In short, the best parts of graphql-request without the graphql
dependency, but without losing the ability to type your requests and responses.
- ✅ Queries, Mutations, Introspection
- ✅ Custom headers per request or shared via
new GraphQLClient()
- ✅ Typed responses and variables
- ❌ Typed GraphQL Document Node (exposing these types would force
graphql
to be a dependency, and risks the "multiple GraphQL" bug even for types-only support)- Note: If you need the Typed Document Node, you should use the excellent graphql-request library
- ❌ Subscriptions (operates over https fetch)
graphinql
no longer provides a fetch by default nor includes p-retry. If you need these features, you can provide them yourself, via the new fetch
option.
import { GraphQLClient, request } from "@taskless/graphinql";
// as an object
const client = new GraphQLClient(endpoint, options);
const { data, error } = await client.request<TReturnType, TVariables>(
stringDocument,
{
// variables
},
{
// options
}
);
// or as a one-off
request<TReturnType, TVariables>(endpoint, stringDocument, variables, options);
endpoint
Your GraphQL endpointstringDocument
A GraphQL query, as a stringvariables
(optional) GraphQL Variables if applicableoptions
(optional) A set of GraphQL Client options, provided as an objectoptions.headers<HeadersInit>
(optional) A Headers compatible object, specifying headers to include with the requestoptions.fetch<typeof fetch>
(optional) A What-WG compatible fetch interface
This library was originally built on phin
before migrating to a What-WG fetch solution.
Jakob Heuser 💻 🚇 📖 |
takanome_dev 📖 💻 |
Samuel Giddins 💻 🚇 |
The source code in this repository is made available under the MIT license.