import { writable } from 'svelte/store'; import type { OperationResult, TypedDocumentNode } from '@urql/core'; import { client } from './client'; export function queryStore( query: TypedDocumentNode, variables: Variables ) { const result = writable | null>(null); const fetching = writable(true); async function execute(vars: Variables = variables) { fetching.set(true); const res = await client.query(query, vars).toPromise(); result.set(res); fetching.set(false); return res; } // Initial fetch execute(); return { subscribe: result.subscribe, fetching: { subscribe: fetching.subscribe }, refetch: execute, }; } export function mutationStore( mutation: TypedDocumentNode ) { const result = writable | null>(null); const fetching = writable(false); async function execute(variables: Variables) { fetching.set(true); const res = await client.mutation(mutation, variables).toPromise(); result.set(res); fetching.set(false); return res; } return { subscribe: result.subscribe, fetching: { subscribe: fetching.subscribe }, execute, }; }