UNPKG

piral-urql

Version:

Plugin for providing a GraphQL client in Piral.

61 lines 2 kB
import * as React from 'react'; import { Provider } from 'urql'; import { gqlQuery, gqlMutation, gqlSubscription } from './queries'; import { setupGqlClient } from './setup'; function extendOptions(context, options) { const originalHeaders = options.headers || {}; const headerPromises = []; context.emit('before-fetch', { headers: originalHeaders, setHeaders(headers) { if (headers) { headerPromises.push(headers); } }, }); return Promise.all(headerPromises).then((newHeaders) => { const headers = newHeaders.reduce((obj, header) => { if (typeof header === 'object' && header) { return { ...obj, ...header, }; } return obj; }, originalHeaders); return { ...options, headers, }; }); } function defaultGqlClient() { if (typeof window !== 'undefined') { return setupGqlClient(); } else { return undefined; } } /** * Creates new Pilet API extensions for GraphQL. * @param client The specific urql client to be used, if any. */ export function createGqlApi(client = defaultGqlClient()) { return (context) => { context.includeProvider(React.createElement(Provider, { value: client })); return { query(q, o = {}) { return extendOptions(context, o).then((options) => gqlQuery(client, q, options)); }, mutate(q, o = {}) { return extendOptions(context, o).then((options) => gqlMutation(client, q, options)); }, subscribe(q, subscriber, o = {}) { const unsubscribe = extendOptions(context, o).then((options) => gqlSubscription(client, q, subscriber, options)); return () => unsubscribe.then((cb) => cb()); }, }; }; } //# sourceMappingURL=create.js.map