{"version":3,"file":"use-fetch.cjs","names":[],"sources":["../../src/use-fetch/use-fetch.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseFetchOptions extends RequestInit {\n  autoInvoke?: boolean;\n}\n\nexport interface UseFetchReturnValue<T> {\n  data: T | null;\n  loading: boolean;\n  error: Error | null;\n  refetch: () => Promise<any>;\n  abort: () => void;\n}\n\nexport function useFetch<T>(\n  url: string,\n  { autoInvoke = true, ...options }: UseFetchOptions = {}\n): UseFetchReturnValue<T> {\n  const [data, setData] = useState<T | null>(null);\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n  const controller = useRef<AbortController | null>(null);\n\n  const refetch = useCallback(() => {\n    if (controller.current) {\n      controller.current.abort();\n    }\n\n    controller.current = new AbortController();\n\n    setLoading(true);\n\n    return fetch(url, { signal: controller.current.signal, ...options })\n      .then((res) => res.json())\n      .then((res) => {\n        setData(res);\n        setLoading(false);\n        return res as T;\n      })\n      .catch((err) => {\n        setLoading(false);\n\n        if (err.name !== 'AbortError') {\n          setError(err);\n        }\n\n        return err;\n      });\n  }, [url]);\n\n  const abort = useCallback(() => {\n    if (controller.current) {\n      controller.current?.abort('');\n    }\n  }, []);\n\n  useEffect(() => {\n    if (autoInvoke) {\n      refetch();\n    }\n\n    return () => {\n      if (controller.current) {\n        controller.current.abort('');\n      }\n    };\n  }, [refetch, autoInvoke]);\n\n  return { data, loading, error, refetch, abort };\n}\n\nexport namespace useFetch {\n  export type Options = UseFetchOptions;\n  export type ReturnValue<T> = UseFetchReturnValue<T>;\n}\n"],"mappings":";;;AAcA,SAAgB,SACd,KACA,EAAE,aAAa,MAAM,GAAG,YAA6B,EAAE,EAC/B;CACxB,MAAM,CAAC,MAAM,YAAA,GAAA,MAAA,UAA8B,KAAK;CAChD,MAAM,CAAC,SAAS,eAAA,GAAA,MAAA,UAAuB,MAAM;CAC7C,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAAmC,KAAK;CACtD,MAAM,cAAA,GAAA,MAAA,QAA4C,KAAK;CAEvD,MAAM,WAAA,GAAA,MAAA,mBAA4B;AAChC,MAAI,WAAW,QACb,YAAW,QAAQ,OAAO;AAG5B,aAAW,UAAU,IAAI,iBAAiB;AAE1C,aAAW,KAAK;AAEhB,SAAO,MAAM,KAAK;GAAE,QAAQ,WAAW,QAAQ;GAAQ,GAAG;GAAS,CAAC,CACjE,MAAM,QAAQ,IAAI,MAAM,CAAC,CACzB,MAAM,QAAQ;AACb,WAAQ,IAAI;AACZ,cAAW,MAAM;AACjB,UAAO;IACP,CACD,OAAO,QAAQ;AACd,cAAW,MAAM;AAEjB,OAAI,IAAI,SAAS,aACf,UAAS,IAAI;AAGf,UAAO;IACP;IACH,CAAC,IAAI,CAAC;CAET,MAAM,SAAA,GAAA,MAAA,mBAA0B;AAC9B,MAAI,WAAW,QACb,YAAW,SAAS,MAAM,GAAG;IAE9B,EAAE,CAAC;AAEN,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,WACF,UAAS;AAGX,eAAa;AACX,OAAI,WAAW,QACb,YAAW,QAAQ,MAAM,GAAG;;IAG/B,CAAC,SAAS,WAAW,CAAC;AAEzB,QAAO;EAAE;EAAM;EAAS;EAAO;EAAS;EAAO"}