UNPKG

nuxt-villus

Version:

Villus GraphQL integration with Nuxt.js

34 lines (33 loc) 1.38 kB
import { createClient, cache, dedup, handleSubscriptions, useClient } from "villus"; import { batch } from "@villus/batch"; import { multipart } from "@villus/multipart"; import { SubscriptionClient } from "graphql-subscriptions-client"; import { onGlobalSetup } from "@nuxtjs/composition-api"; import fetch from "cross-fetch"; // Get options from template without triggering ESLint const options = JSON.parse(`<%= JSON.stringify(options, null, 2) %>`); const villusPlugin = (context, inject) => { function getVillusClientOptions() { const plugins = []; if (process.client && options.wsEndpoint) { const subscriptionClient = new SubscriptionClient(options.wsEndpoint, { reconnect: true }); const subscriptions = handleSubscriptions((operation) => subscriptionClient.request(operation)); plugins.push(subscriptions); } plugins.push(...[multipart(), cache(), dedup(), batch({ fetch })]); return { url: options.httpEndpoint || "/graphql", use: plugins, }; } if (options.enableCompositionApi) { onGlobalSetup(() => { const villus = useClient(getVillusClientOptions()); inject("villus", villus); }); } else { inject("villus", createClient(getVillusClientOptions())); } }; export default villusPlugin;