piral-urql
Version:
Plugin for providing a GraphQL client in Piral.
39 lines • 1.53 kB
JavaScript
import { Client, defaultExchanges, subscriptionExchange } from 'urql';
import { SubscriptionClient } from 'subscriptions-transport-ws';
/**
* Sets up an urql client by using the given config.
* @param config The configuration for the new urql client.
*/
export function setupGqlClient(config = {}) {
const url = config.url || location.origin;
const subscriptionUrl = (config.subscriptionUrl || url).replace(/^http/i, 'ws');
const subscriptionClient = config.subscriptionUrl !== false &&
new SubscriptionClient(subscriptionUrl, {
reconnect: true,
lazy: config.lazy || false,
inactivityTimeout: 0,
connectionCallback(err) {
const { onConnected, onDisconnected } = config;
const errors = err && (Array.isArray(err) ? err : [err]);
if (errors && errors.length > 0) {
typeof onDisconnected === 'function' && onDisconnected(errors);
}
else {
typeof onConnected === 'function' && onConnected();
}
},
});
const forwardSubscription = (operation) => subscriptionClient.request(operation);
const exchanges = [...defaultExchanges];
if (subscriptionClient) {
exchanges.push(subscriptionExchange({
forwardSubscription,
}));
}
return new Client({
url,
fetchOptions: config.default || {},
exchanges,
});
}
//# sourceMappingURL=setup.js.map