UNPKG

nuxt-apex

Version:

Auto-generates fully typed useFetch composables for Nuxt 3/4 server endpoints with Zod validation and zero boilerplate

50 lines (49 loc) 1.42 kB
import { ref, shallowRef } from "vue"; export function useLoad(runner, options = {}) { const status = ref("idle"); const data = shallowRef(null); const error = shallowRef(null); let lastCallId = 0; let isActive = true; const cancel = () => { lastCallId++; status.value = "idle"; }; const load = async (...args) => { if (typeof runner !== "function") return; const callId = ++lastCallId; status.value = "pending"; error.value = null; try { const result = await runner(...args); if (!isActive || callId !== lastCallId) return; data.value = result; status.value = "success"; } catch (err) { if (!isActive || callId !== lastCallId) return; error.value = err; status.value = "error"; } }; const isPromise = runner !== null && typeof runner?.then === "function"; if (isPromise) { const promise = runner; const callId = ++lastCallId; status.value = "pending"; promise.then((res) => { if (!isActive || callId !== lastCallId) return; data.value = res; status.value = "success"; }).catch((err) => { if (!isActive || callId !== lastCallId) return; error.value = err; status.value = "error"; }); } else { const { immediate = false, args: initialArgs } = options; if (immediate) { load(...initialArgs ?? []); } } return { status, data, error, load }; }