UNPKG

vormiaqueryjs

Version:

Vormia Query Js - A npm package for query management with VormiaPHP laravel Backend application

88 lines (87 loc) 2.35 kB
import { writable } from "svelte/store"; import { getGlobalVormiaClient } from "../client/createVormiaClient.mjs"; import { VormiaError } from "../client/utils/VormiaError.mjs"; function createVormiaStore(initialOptions = {}) { const client = getGlobalVormiaClient(); const { subscribe, set, update } = writable({ data: null, error: null, isLoading: false, isError: false, isSuccess: false }); async function fetchData(options = {}) { var _a, _b; const mergedOptions = { ...initialOptions, ...options }; const { endpoint, method = "GET", params, data: bodyData, headers, transform, onSuccess, onError } = mergedOptions; update((state) => ({ ...state, isLoading: true, isError: false, isSuccess: false })); try { const config = { method, params: method === "GET" ? params : void 0, data: method !== "GET" ? bodyData || params : void 0, headers }; const response = await client.request({ url: endpoint, ...config }); let result = response.data; if (transform) { result = transform(result); } const newState = { data: result, error: null, isLoading: false, isError: false, isSuccess: true }; set(newState); if (onSuccess) { onSuccess(newState); } return newState; } catch (err) { const errorMessage = err instanceof Error ? err.message : "An unknown error occurred"; const status = (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.status; const errorData = (_b = err == null ? void 0 : err.response) == null ? void 0 : _b.data; const errorObj = err instanceof VormiaError ? err : new VormiaError(errorMessage, status, errorData); const errorState = { data: null, error: errorObj, isLoading: false, isError: true, isSuccess: false }; set(errorState); if (onError) { onError(errorObj); } throw errorObj; } } if (initialOptions.immediate !== false) { fetchData(); } return { subscribe, fetch: fetchData, refetch: fetchData, set, update }; } export { createVormiaStore }; //# sourceMappingURL=svelte.mjs.map