{"version":3,"file":"index.mjs","names":["r","f","t","u","a","n","v","y","d","n","o","t","r","e","u","l","c"],"sources":["../../../node_modules/@better-hooks/lifecycle/dist/index.esm.js","../../../node_modules/@better-hooks/performance/dist/index.esm.js","../src/helpers/use-request-events/use-request-events.hooks.ts","../src/helpers/use-tracked-state/use-tracked-state.constants.ts","../src/utils/deep-equal.utils.ts","../src/utils/bounce.utils.ts","../src/utils/tracked-proxy.utils.ts","../src/helpers/use-tracked-state/use-tracked-state.utils.ts","../src/helpers/use-tracked-state/use-tracked-state.hooks.ts","../src/helpers/use-socket-state/use-socket-state.hooks.ts","../src/helpers/use-socket-state/use-socket-state.constants.ts","../src/provider/provider.tsx","../src/hooks/use-fetch/use-fetch.hooks.ts","../src/hooks/use-fetch/use-fetch.utils.ts","../src/hooks/use-fetch/use-fetch.constants.ts","../src/hooks/use-submit/use-submit.hooks.ts","../src/hooks/use-submit/use-submit.constants.ts","../src/hooks/use-queue/use-queue.hooks.ts","../src/hooks/use-queue/use-queue.constants.ts","../src/hooks/use-cache/use-cache.hooks.ts","../src/hooks/use-cache/use-cache.constants.ts","../src/hooks/use-stream/use-stream.hooks.ts","../src/hooks/use-listener/use-listener.hooks.ts","../src/hooks/use-emitter/use-emitter.hooks.ts","../src/hooks/use-app-manager/use-app-manager.hooks.ts"],"sourcesContent":["import{useRef as r,useEffect as n,useState as t,useCallback as u,useLayoutEffect as c}from\"react\";var e=function(t,u,c){void 0===c&&(c=!1);var e=r(null),o=r(c);n((function(){if(o.current)return function(){t(e.current),e.current=u};o.current=!0}),u)},o=function(t){var u=r(!1);n((function(){if(!u.current)return u.current=!0,t()}),[])},i=function(t,u,c){void 0===c&&(c=!1);var e=r(c);n((function(){if(e.current)return t();e.current=!0}),u)};var f=function(){var r=function(r,n){var t=\"function\"==typeof Symbol&&r[Symbol.iterator];if(!t)return r;var u,c,e=t.call(r),o=[];try{for(;(void 0===n||n-- >0)&&!(u=e.next()).done;)o.push(u.value)}catch(r){c={error:r}}finally{try{u&&!u.done&&(t=e.return)&&t.call(e)}finally{if(c)throw c.error}}return o}(t(0),2)[1];return u((function(){r((function(r){return r+1}))}),[])},a=function(){var t=r(!0);return n((function(){return t.current=!0,function(){t.current=!1}}),[]),t},v=function(n){var t=r(!1);c((function(){if(!t.current)return t.current=!0,n()}),[])},l=function(n,t,u){void 0===u&&(u=!1);var e=r(u);c((function(){if(e.current)return n();e.current=!0}),t)},y=function(n){var t=r(!0);t.current&&n(),t.current=!1},d=function(r){n((function(){return r}),[])};export{e as useDepsChange,o as useDidMount,i as useDidUpdate,f as useForceUpdate,a as useIsMounted,v as useLayoutMount,l as useLayoutUpdate,y as useWillMount,d as useWillUnmount};\n//# sourceMappingURL=index.esm.js.map\n","import{useRef as n,useCallback as t,useEffect as r,useState as e,useMemo as u,useLayoutEffect as c}from\"react\";import{useForceUpdate as o,useDidUpdate as i,useDidMount as l}from\"@better-hooks/lifecycle\";var f=function(e){var u=(e||{}).delay,c=void 0===u?400:u,i=n(!1),l=n(null),f=o(),a=t((function(){i.current&&f()}),[f]),v=function(){null!==l.current&&clearTimeout(l.current),l.current=null},d=t((function(n,t){var r=null!=t?t:c;v(),l.current=setTimeout((function(){l.current=null,n(),a()}),r),a()}),[c,a]);return r((function(){return v}),[]),{get active(){return i.current=!0,!!l.current},debounce:d,reset:v}},a=function(n,t,e){var u=f(t).debounce;r((function(){u(n)}),e)};function v(n,t){var r=\"function\"==typeof Symbol&&n[Symbol.iterator];if(!r)return n;var e,u,c=r.call(n),o=[];try{for(;(void 0===t||t-- >0)&&!(e=c.next()).done;)o.push(e.value)}catch(n){u={error:n}}finally{try{e&&!e.done&&(r=c.return)&&r.call(c)}finally{if(u)throw u.error}}return o}var d=function(n,t){var r=f(t).debounce,u=v(e(n),2),c=u[0],o=u[1];return[c,function(n){return r((function(){return o(n)}))}]},y=function(n){var t=Object.prototype.toString.call(n);return Array.isArray(n)?!n.length:\"object\"==typeof n&&null!==n&&\"[object Object]\"===t&&!Object.keys(n).length},m=function(n,t){var r,e=Object.prototype.toString.call(n),u=Object.prototype.toString.call(t),c=typeof n,o=typeof t,i=function(n){return c===n&&o===n};return e===u&&(null===n&&null===t||(!!(i(\"number\")&&Number.isNaN(n)&&Number.isNaN(t))||(!(!y(n)||!y(t))||(Array.isArray(n)&&Array.isArray(t)?n.length===t.length&&!n.some((function(n,r){return!m(n,t[r])})):i(\"object\")&&(e===(r=\"[object Object]\")&&u===r)?Object.keys(n).length===Object.keys(t).length&&!Object.entries(n).some((function(n){var r=v(n,2),e=r[0],u=r[1];return!m(u,t[e])})):n instanceof Date&&t instanceof Date?+n==+t:n===t))))},s=function(t,e){return r(t,(o=n(c=e),i=n(0),m(c,o.current)||(o.current=c,i.current+=1),u((function(){return o.current}),[i.current])));var c,o,i},b=function(t,r,u){var c=u||{},o=c.immediate,f=void 0===o||o,a=c.disabled,d=void 0!==a&&a,y=v(e(null),2),m=y[0],s=y[1],b=n(t),p=function(){m&&clearInterval(m),s(null)},h=function(){p(),!r&&0!==r||d||s(setInterval((function(){return b.current()}),r))};return i((function(){b.current=t}),[t]),l((function(){if(b.current=t,f)return h(),p})),i((function(){return b.current=t,h(),p}),[r]),{active:null!==m,start:h,stop:p}},p=function(t){var e=t||{},u=e.interval,c=void 0===u?200:u,i=e.timeout,l=void 0===i?200:i,f=n(0),a=n(!0),v=n(!1),d=n(null),y=o(),m=function(){a.current&&(a.current=!1),v.current&&y()},s=function(){null!==d.current&&clearTimeout(d.current),d.current=null};return r((function(){return s}),[]),{get active(){return v.current=!0,!!d.current},throttle:function(n,t){var r,e,u=function(){f.current=Date.now(),n(),m()},o=null!==(r=null==t?void 0:t.interval)&&void 0!==r?r:c,i=null!==(e=null==t?void 0:t.timeout)&&void 0!==e?e:l,v=Date.now()>=f.current+o;a.current&&m(),d.current&&s(),v?u():i&&(d.current=setTimeout((function(){d.current=null,a.current=!0,u()}),i))},reset:s}},h=function(n,t,e){var u=p(t).throttle;r((function(){u(n)}),e)},j=function(n,t){var r=p(t).throttle,u=v(e(n),2),c=u[0],o=u[1];return[c,function(n){return r((function(){return o(n)}))}]},g=function(t,e){var u=n(t);w((function(){u.current=t}),[t]),r((function(){if(e||0===e){var n=setTimeout((function(){return u.current()}),e);return function(){return clearTimeout(n)}}}),[e])},w=!(\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement)?c:r;export{f as useDebounce,a as useDebounceEffect,d as useDebounceState,s as useDeepEffect,b as useInterval,w as useIsomorphicEffect,p as useThrottle,h as useThrottleEffect,j as useThrottleState,g as useTimeout};\n//# sourceMappingURL=index.esm.js.map\n","import type {\n  ExtractErrorType,\n  ExtractResponseType,\n  RequestInstance,\n  RequestEventType,\n  RequestLoadingEventType,\n  ExtractAdapterType,\n  RequestProgressEventType,\n  RequestResponseEventType,\n  ResponseType,\n  OptimisticCallbackResult,\n} from \"@hyper-fetch/core\";\nimport { scopeKey } from \"@hyper-fetch/core\";\nimport { useWillUnmount } from \"@better-hooks/lifecycle\";\nimport { useRef } from \"react\";\n\nimport type {\n  OnErrorCallbackType,\n  OnStartCallbackType,\n  OnSuccessCallbackType,\n  OnProgressCallbackType,\n  OnFinishedCallbackType,\n  UseRequestEventsDataMap,\n  UseRequestEventsReturnType,\n  UseRequestEventsPropsType,\n  UseRequestEventsLifecycleMap,\n} from \"helpers\";\n\n/**\n * This is helper hook that handles main Hyper-Fetch event/data flow\n * @internal\n * @param options\n * @returns\n */\nexport const useRequestEvents = <R extends RequestInstance>({\n  request,\n  dispatcher,\n  logger,\n  actions,\n  setCacheData,\n  getIsDataProcessing,\n}: UseRequestEventsPropsType<R>): UseRequestEventsReturnType<R> => {\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  const { unstable_responseMapper } = request;\n  const { cache, requestManager } = request.client;\n\n  // ******************\n  // Callbacks\n  // ******************\n\n  const onSuccessCallback = useRef<null | OnSuccessCallbackType<R>>(null);\n  const onErrorCallback = useRef<null | OnErrorCallbackType<R>>(null);\n  const onAbortCallback = useRef<null | OnErrorCallbackType<R>>(null);\n  const onOfflineErrorCallback = useRef<null | OnErrorCallbackType<R>>(null);\n  const onFinishedCallback = useRef<null | OnFinishedCallbackType<R>>(null);\n  const onRequestStartCallback = useRef<null | OnStartCallbackType<R>>(null);\n  const onResponseStartCallback = useRef<null | OnStartCallbackType<R>>(null);\n  const onDownloadProgressCallback = useRef<null | OnProgressCallbackType>(null);\n  const onUploadProgressCallback = useRef<null | OnProgressCallbackType>(null);\n\n  // ******************\n  // Listeners unmounting\n  // ******************\n\n  const lifecycleEvents = useRef<UseRequestEventsLifecycleMap>(new Map());\n  const dataEvents = useRef<UseRequestEventsDataMap | null>(null);\n\n  const removeLifecycleListener = (requestId: string) => {\n    const event = lifecycleEvents.current.get(requestId);\n    event?.unmount();\n    lifecycleEvents.current.delete(requestId);\n  };\n\n  const clearLifecycleListeners = () => {\n    const events = lifecycleEvents.current;\n    const listeners = Array.from(events.values());\n    listeners.forEach((value) => {\n      value.unmount();\n    });\n    events.clear();\n  };\n\n  // ******************\n  // Optimistic state\n  // ******************\n\n  const optimisticResultsRef = useRef<Map<string, OptimisticCallbackResult<any>>>(new Map());\n\n  // ******************\n  // Response handlers\n  // ******************\n\n  const handleResponseCallbacks = (values: RequestResponseEventType<R>) => {\n    const { success } = values.response;\n    const { isOffline, isCanceled, willRetry } = values.details;\n    const opt = optimisticResultsRef.current.get(values.requestId);\n    const paramsWithContext = { ...values, mutationContext: opt?.context } as any;\n\n    if (request.offline && isOffline && !success) {\n      logger.debug({ title: \"Performing offline error callback\", type: \"system\", extra: values });\n      onOfflineErrorCallback.current?.(paramsWithContext);\n    } else if (isCanceled) {\n      logger.debug({ title: \"Performing abort callback\", type: \"system\", extra: values });\n      try {\n        opt?.rollback?.();\n      } catch {\n        // rollback threw — onAbort still fires\n      }\n      onAbortCallback.current?.(paramsWithContext);\n    } else if (success) {\n      logger.debug({ title: \"Performing success callback\", type: \"system\", extra: values });\n      if (opt?.invalidate) {\n        opt.invalidate.forEach((req) => cache.invalidate(req));\n      }\n      onSuccessCallback.current?.(paramsWithContext);\n    } else {\n      logger.debug({ title: \"Performing error callback\", type: \"system\", extra: values });\n      if (!willRetry) {\n        try {\n          opt?.rollback?.();\n        } catch {\n          // rollback threw — onError still fires\n        }\n      }\n      onErrorCallback.current?.(paramsWithContext);\n    }\n    onFinishedCallback.current?.(paramsWithContext);\n    if (!willRetry) {\n      optimisticResultsRef.current.delete(values.requestId);\n    }\n  };\n\n  // ******************\n  // Lifecycle\n  // ******************\n\n  const handleGetLoadingEvent = (req: R) => {\n    return ({ loading }: RequestLoadingEventType<RequestInstance>) => {\n      const isProcessing = getIsDataProcessing(req.cacheKey);\n\n      // When we process the cache data, we don't want to change the loading state during it\n      // This prevents the UI from flickering with { data: null, loading: false }\n      if (isProcessing) return;\n\n      const canDisableLoading = !loading && !dispatcher.hasRunningRequests(scopeKey(req.queryKey, req.scope));\n      if (loading || canDisableLoading) {\n        actions.setLoading(loading);\n      }\n    };\n  };\n\n  const handleDownloadProgress = (data: RequestProgressEventType<RequestInstance>) => {\n    onDownloadProgressCallback.current?.(data);\n  };\n\n  const handleUploadProgress = (data: RequestProgressEventType<RequestInstance>) => {\n    onUploadProgressCallback.current?.(data);\n  };\n\n  const handleRequestStart = () => {\n    return (details: RequestEventType<R>) => {\n      onRequestStartCallback.current?.(details);\n    };\n  };\n  const handleResponseStart = () => {\n    return (details: RequestEventType<R>) => {\n      onResponseStartCallback.current?.(details);\n    };\n  };\n\n  const handleResponse = () => {\n    return (values: RequestResponseEventType<R>) => {\n      const data = unstable_responseMapper\n        ? unstable_responseMapper(values.response as ResponseType<any, any, ExtractAdapterType<R>>)\n        : values.response;\n\n      if (data instanceof Promise) {\n        return (async () => {\n          handleResponseCallbacks({\n            ...values,\n            response: (await data) as ResponseType<any, any, ExtractAdapterType<R>>,\n          });\n        })();\n      }\n      return handleResponseCallbacks(values);\n    };\n  };\n\n  const handleRemove = ({ requestId }: RequestEventType<R>) => {\n    const opt = optimisticResultsRef.current.get(requestId);\n    if (opt) {\n      try {\n        opt.rollback?.();\n      } catch {\n        // swallow — queue removal rollback failure\n      }\n      optimisticResultsRef.current.delete(requestId);\n    }\n    removeLifecycleListener(requestId);\n  };\n\n  // ******************\n  // Data Listeners\n  // ******************\n\n  const clearCacheDataListener = () => {\n    dataEvents.current?.unmount();\n    dataEvents.current = null;\n  };\n\n  const addCacheDataListener = (req: R) => {\n    // Data handlers\n    const loadingUnmount = requestManager.events.onLoadingByQueue(\n      scopeKey(req.queryKey, req.scope),\n      handleGetLoadingEvent(req),\n    );\n    const getResponseUnmount = cache.events.onDataByKey<\n      ExtractResponseType<R>,\n      ExtractErrorType<R>,\n      ExtractAdapterType<R>\n    >(req.cacheKey, setCacheData);\n\n    const unmount = () => {\n      loadingUnmount();\n      getResponseUnmount();\n    };\n\n    clearCacheDataListener();\n    dataEvents.current = { unmount };\n\n    return unmount;\n  };\n\n  // ******************\n  // Lifecycle Listeners\n  // ******************\n\n  const addLifecycleListeners = (req: R, requestId?: string, optimisticResult?: OptimisticCallbackResult<any>) => {\n    /**\n     * useFetch handles requesting by general keys\n     * This makes it possible to deduplicate requests from different places and share data\n     */\n    if (!requestId) {\n      // It's important to clear previously attached listeners to not cause some additional response/request\n      // events to be triggered during lifecycle\n      clearLifecycleListeners();\n      const { queryKey, cacheKey } = req;\n      const requestStartUnmount = requestManager.events.onRequestStartByQueue(queryKey, handleRequestStart());\n      const responseStartUnmount = requestManager.events.onResponseStartByQueue(queryKey, handleResponseStart());\n      const uploadUnmount = requestManager.events.onUploadProgressByQueue(queryKey, handleUploadProgress);\n      const downloadUnmount = requestManager.events.onDownloadProgressByQueue(queryKey, handleDownloadProgress);\n      const responseUnmount = requestManager.events.onResponseByCache(cacheKey, handleResponse());\n\n      const unmount = () => {\n        downloadUnmount();\n        uploadUnmount();\n        requestStartUnmount();\n        responseStartUnmount();\n        responseUnmount();\n      };\n\n      lifecycleEvents.current.set(queryKey, { unmount });\n\n      return unmount;\n    }\n    /**\n     * useSubmit handles requesting by requestIds, this makes it possible to track single requests\n     */\n    if (optimisticResult) {\n      optimisticResultsRef.current.set(requestId, optimisticResult);\n    }\n    const requestRemove = requestManager.events.onRemoveById(requestId, handleRemove);\n    const requestStartUnmount = requestManager.events.onRequestStartById(requestId, handleRequestStart());\n    const responseStartUnmount = requestManager.events.onResponseStartById(requestId, handleResponseStart());\n    const responseUnmount = requestManager.events.onResponseById(requestId, handleResponse());\n    const uploadUnmount = requestManager.events.onUploadProgressById(requestId, handleUploadProgress);\n    const downloadUnmount = requestManager.events.onDownloadProgressById(requestId, handleDownloadProgress);\n\n    const unmount = () => {\n      requestRemove();\n      downloadUnmount();\n      uploadUnmount();\n      requestStartUnmount();\n      responseStartUnmount();\n      responseUnmount();\n    };\n\n    lifecycleEvents.current.set(requestId, { unmount });\n\n    return unmount;\n  };\n\n  // ******************\n  // Abort\n  // ******************\n\n  const abort = () => {\n    const ak = scopeKey(request.abortKey, request.scope);\n    const requests = dispatcher.getAllRunningRequests();\n    requests.forEach((requestData) => {\n      const reqAk = scopeKey(requestData.request.abortKey, requestData.request.scope);\n      if (reqAk === ak) {\n        const qk = scopeKey(requestData.request.queryKey, requestData.request.scope);\n        dispatcher.delete(qk, requestData.requestId, reqAk);\n      }\n    });\n  };\n\n  // ******************\n  // Lifecycle\n  // ******************\n\n  /**\n   * On unmount we want to clear all the listeners to prevent memory leaks\n   */\n  useWillUnmount(() => {\n    // Unmount listeners\n    clearLifecycleListeners();\n    clearCacheDataListener();\n  });\n\n  return [\n    {\n      abort,\n      onSuccess: (callback: OnSuccessCallbackType<R>) => {\n        onSuccessCallback.current = callback;\n      },\n      onError: (callback: OnErrorCallbackType<R>) => {\n        onErrorCallback.current = callback;\n      },\n      onAbort: (callback: OnErrorCallbackType<R>) => {\n        onAbortCallback.current = callback;\n      },\n      onOfflineError: (callback: OnErrorCallbackType<R>) => {\n        onOfflineErrorCallback.current = callback;\n      },\n      onFinished: (callback: OnFinishedCallbackType<R>) => {\n        onFinishedCallback.current = callback;\n      },\n      onRequestStart: (callback: OnStartCallbackType<R>) => {\n        onRequestStartCallback.current = callback;\n      },\n      onResponseStart: (callback: OnStartCallbackType<R>) => {\n        onResponseStartCallback.current = callback;\n      },\n      onDownloadProgress: (callback: OnProgressCallbackType) => {\n        onDownloadProgressCallback.current = callback;\n      },\n      onUploadProgress: (callback: OnProgressCallbackType) => {\n        onUploadProgressCallback.current = callback;\n      },\n    },\n    {\n      addCacheDataListener,\n      clearCacheDataListener,\n      addLifecycleListeners,\n      removeLifecycleListener,\n      clearLifecycleListeners,\n    },\n  ];\n};\n","import type { UseTrackedStateType } from \"./use-tracked-state.types\";\n\nexport const initialState: UseTrackedStateType = {\n  data: null,\n  error: null,\n  status: null,\n  extra: {},\n  success: false,\n  loading: false,\n  retries: 0,\n  responseTimestamp: null,\n  requestTimestamp: null,\n};\n","/**\n * Check if value is empty\n * @param value any object or primitive\n * @returns true when value is empty\n */\nexport const isEmpty = (value: unknown): boolean => {\n  const valueType = Object.prototype.toString.call(value);\n  if (Array.isArray(value)) return !value.length;\n  if (typeof value === \"object\" && value !== null && valueType === \"[object Object]\") return !Object.keys(value).length;\n  return false;\n};\n\n/**\n * Allow to deep compare any passed values\n * @param firstValue unknown\n * @param secondValue unknown\n * @returns true when elements are equal\n */\nexport const isEqual = (firstValue: unknown, secondValue: unknown): boolean => {\n  // Nulls (objects), and other primitives\n  if (firstValue === secondValue) return true;\n\n  try {\n    const firstValueType = Object.prototype.toString.call(firstValue);\n    const secondValueType = Object.prototype.toString.call(secondValue);\n\n    const firstType = typeof firstValue;\n    const secondType = typeof secondValue;\n\n    const isType = (type: unknown) => firstType === type && secondType === type;\n    const isTypeValue = (type: unknown) => firstValueType === type && secondValueType === type;\n\n    // Compared types are different\n    if (firstValueType !== secondValueType) return false;\n\n    // NaN\n    if (isType(\"number\") && Number.isNaN(firstValue) && Number.isNaN(secondValue)) return true;\n\n    // Empty Array or Object\n    if (isEmpty(firstValue) && isEmpty(secondValue)) return true;\n\n    // Array\n    if (Array.isArray(firstValue) && Array.isArray(secondValue)) {\n      if (firstValue.length !== secondValue.length) return false;\n\n      return !firstValue.some((element, i) => !isEqual(element, secondValue[i]));\n    }\n\n    // Object\n    if (isType(\"object\") && isTypeValue(\"[object Object]\")) {\n      if (Object.keys(firstValue as object).length !== Object.keys(secondValue as object).length) return false;\n\n      return !Object.entries(firstValue as object).some(\n        ([key, value]) => !isEqual(value, (secondValue as Record<string, unknown>)[key]),\n      );\n    }\n\n    // Date\n    if (firstValue instanceof Date && secondValue instanceof Date) {\n      return +firstValue === +secondValue;\n    }\n\n    // undefined, string, number, bool\n    return firstValue === secondValue;\n  } catch (err) {\n    console.error(err);\n    return false;\n  }\n};\n","export const getBounceData = (bounceData: {\n  reset: () => void;\n  active: boolean;\n}): { reset: () => void; active: boolean } => {\n  return {\n    ...bounceData,\n    ...{ throttle: undefined, debounce: undefined },\n  };\n};\n","/**\n * Wraps a plain object in a Proxy that calls `setRenderKey` when tracked properties are accessed.\n * Unlike getter-based tracking, Proxy-wrapped objects display their actual values in console.log,\n * making debugging significantly easier while preserving field-level dependency tracking.\n */\nexport const createTrackedProxy = <T extends Record<string, unknown>, K extends string>(\n  target: T,\n  trackedKeys: ReadonlyArray<K>,\n  setRenderKey: (key: K) => void,\n): T => {\n  return new Proxy(target, {\n    get(obj, prop, receiver) {\n      if (typeof prop === \"string\" && trackedKeys.includes(prop as K)) {\n        setRenderKey(prop as K);\n      }\n      return Reflect.get(obj, prop, receiver);\n    },\n  });\n};\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport type {\n  CacheValueType,\n  NullableType,\n  RequestInstance,\n  ExtractResponseType,\n  ExtractErrorType,\n  ExtractAdapterResolvedType,\n  Dispatcher,\n  ExtractAdapterType,\n  ExtractAdapterExtraType,\n  ResponseDetailsType,\n  ExtractAdapterStatusType,\n  ResponseType,\n} from \"@hyper-fetch/core\";\nimport { scopeKey } from \"@hyper-fetch/core\";\n\nimport type { UseTrackedStateType } from \"helpers\";\nimport { initialState } from \"helpers\";\n\n/**\n * Extracts the \"identity\" portion of a cache key (method + endpoint with resolved params),\n * stripping the query params part. Cache keys follow the format: `method_endpoint_queryParams`.\n */\nconst getCacheKeyIdentity = (cacheKey: string): string => {\n  const lastUnderscoreIndex = cacheKey.lastIndexOf(\"_\");\n  if (lastUnderscoreIndex === -1) return cacheKey;\n  return cacheKey.substring(0, lastUnderscoreIndex);\n};\n\n/**\n * Determines whether state should be cleared when the cache key changes.\n *\n * - `\"clean\"` — always clear\n * - `\"preserve\"` — never clear\n * - `\"auto\"` — clear when the resource identity changed (URL params), preserve when only query params changed\n */\nexport const getShouldClearState = (\n  mode: \"auto\" | \"preserve\" | \"clean\",\n  oldCacheKey: string,\n  newCacheKey: string,\n): boolean => {\n  if (oldCacheKey === newCacheKey) return false;\n\n  if (mode === \"clean\") return true;\n  if (mode === \"preserve\") return false;\n\n  // \"auto\" — compare the identity part (method + endpoint with params)\n  return getCacheKeyIdentity(oldCacheKey) !== getCacheKeyIdentity(newCacheKey);\n};\n\nexport const getDetailsState = (\n  state?: UseTrackedStateType<RequestInstance>,\n  details?: Partial<ResponseDetailsType>,\n): ResponseDetailsType => {\n  return {\n    retries: state?.retries || 0,\n    isCanceled: false,\n    isOffline: false,\n    willRetry: false,\n    addedTimestamp: +new Date(),\n    triggerTimestamp: +new Date(),\n    requestTimestamp: +new Date(),\n    responseTimestamp: +new Date(),\n    ...details,\n  };\n};\n\nexport const isStaleCacheData = (staleTime: number, staleTimestamp: NullableType<Date | number>) => {\n  if (!staleTimestamp) return true;\n  return +new Date() > +staleTimestamp + staleTime;\n};\n\nexport const getValidCacheData = <T extends RequestInstance>(\n  request: T,\n  initialResponse: NullableType<Partial<ExtractAdapterResolvedType<T>>>,\n  cacheData: NullableType<CacheValueType<ExtractResponseType<T>, ExtractErrorType<T>, ExtractAdapterType<T>>>,\n): CacheValueType<ExtractResponseType<T>, ExtractErrorType<T>, ExtractAdapterType<T>> | null => {\n  const isStale = isStaleCacheData(request.staleTime, cacheData?.responseTimestamp);\n\n  if (!isStale && cacheData) {\n    return cacheData;\n  }\n\n  if (initialResponse) {\n    return {\n      data: null,\n      error: null,\n      status: null,\n      success: true,\n      extra: null,\n      cached: !!request.cache,\n      ...(initialResponse as Partial<ExtractAdapterResolvedType<T>>),\n      ...getDetailsState(),\n      staleTime: 1000,\n      version: request.client.cache.version,\n      cacheKey: request.cacheKey,\n      scope: request.scope,\n      cacheTime: request.cacheTime,\n      requestTimestamp: initialResponse?.requestTimestamp ?? +new Date(),\n      responseTimestamp: initialResponse?.responseTimestamp ?? +new Date(),\n    };\n  }\n\n  return null;\n};\n\nexport const getTimestamp = (timestamp?: NullableType<number | Date>) => {\n  return timestamp ? new Date(timestamp) : null;\n};\n\nexport const getIsInitiallyLoading = <T extends RequestInstance>({\n  queryKey,\n  dispatcher,\n  hasState,\n  revalidate,\n  disabled,\n}: {\n  queryKey: string;\n  dispatcher: Dispatcher<ExtractAdapterType<T>>;\n  hasState: boolean;\n  revalidate?: boolean;\n  disabled?: boolean;\n}) => {\n  if (!revalidate && hasState) {\n    return false;\n  }\n\n  const queue = dispatcher.getQueue(queryKey);\n  const isInitiallyLoading = dispatcher.hasRunningRequests(queryKey) || (!queue.stopped && disabled === false);\n\n  return isInitiallyLoading;\n};\n\nexport const getInitialState = <T extends RequestInstance>({\n  initialResponse,\n  dispatcher,\n  request,\n  disabled,\n  revalidate,\n}: {\n  initialResponse: NullableType<Partial<ExtractAdapterResolvedType<T>>>;\n  dispatcher: Dispatcher<ExtractAdapterType<T>>;\n  request: T;\n  disabled?: boolean; // useFetch only\n  revalidate?: boolean; // useFetch only\n}): UseTrackedStateType<T> => {\n  const { client, cacheKey, unstable_responseMapper } = request;\n  const { cache } = client;\n\n  const cacheData = cache.get<ExtractResponseType<T>, ExtractErrorType<T>>(scopeKey(cacheKey, request.scope));\n  const cacheState = getValidCacheData<T>(request, initialResponse, cacheData);\n\n  const initialLoading = getIsInitiallyLoading({\n    queryKey: scopeKey(request.queryKey, request.scope),\n    dispatcher,\n    disabled,\n    revalidate,\n    hasState: !!cacheState,\n  });\n\n  if (cacheState) {\n    const mappedData = unstable_responseMapper\n      ? unstable_responseMapper(cacheState as ResponseType<any, any, ExtractAdapterType<T>>)\n      : cacheState;\n    if (mappedData instanceof Promise) {\n      // For the async mapper we cannot return async values\n      // So we have return the initial state instead\n      return initialState;\n    }\n    return {\n      data: mappedData.data,\n      error: mappedData.error,\n      status: mappedData.status as ExtractAdapterStatusType<ExtractAdapterType<T>>,\n      success: mappedData.success,\n      extra: (mappedData.extra || client.adapter.defaultExtra) as ExtractAdapterExtraType<ExtractAdapterType<T>>,\n      retries: cacheState.retries,\n      requestTimestamp: getTimestamp(cacheState.requestTimestamp),\n      responseTimestamp: getTimestamp(cacheState.responseTimestamp),\n      loading: initialLoading,\n    };\n  }\n\n  return {\n    data: initialState.data,\n    error: initialState.error,\n    status: initialState.status as ExtractAdapterStatusType<ExtractAdapterType<T>>,\n    success: initialState.success,\n    extra: request.client.adapter.defaultExtra as ExtractAdapterExtraType<ExtractAdapterType<T>>,\n    retries: initialState.retries,\n    requestTimestamp: getTimestamp(initialState.requestTimestamp),\n    responseTimestamp: getTimestamp(initialState.responseTimestamp),\n    loading: initialLoading,\n  };\n};\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { useDidUpdate } from \"@better-hooks/lifecycle\";\nimport type {\n  ExtractErrorType,\n  CacheValueType,\n  ExtractResponseType,\n  RequestInstance,\n  ExtractAdapterType,\n  ExtractAdapterExtraType,\n  ResponseType,\n} from \"@hyper-fetch/core\";\nimport { scopeKey } from \"@hyper-fetch/core\";\nimport { useCallback, useRef, useSyncExternalStore } from \"react\";\n\nimport { isEqual } from \"utils\";\nimport type {\n  UseTrackedStateActions,\n  UseTrackedStateType,\n  UseTrackedStateProps,\n  UseTrackedStateReturn,\n} from \"./use-tracked-state.types\";\nimport {\n  getInitialState,\n  getIsInitiallyLoading,\n  getShouldClearState,\n  getValidCacheData,\n  isStaleCacheData,\n} from \"./use-tracked-state.utils\";\n\n/**\n *\n * @param request\n * @param initialResponse\n * @param dispatcher\n * @param dependencies\n * @internal\n */\nexport const useTrackedState = <T extends RequestInstance>({\n  request,\n  dispatcher,\n  initialResponse,\n  deepCompare,\n  dependencyTracking,\n  keepPreviousData = \"auto\",\n  disabled,\n  revalidate,\n}: UseTrackedStateProps<T>): UseTrackedStateReturn<T> => {\n  const { client, cacheKey, queryKey, staleTime, unstable_responseMapper } = request;\n  const { cache } = client;\n\n  const state = useRef<UseTrackedStateType<T>>(getInitialState({ initialResponse, dispatcher, request, disabled }));\n  const renderKeys = useRef<Array<keyof UseTrackedStateType<T>>>([]);\n  const isProcessingData = useRef(\"\");\n  const previousCacheKey = useRef(cacheKey);\n\n  // ******************\n  // useSyncExternalStore\n  // ******************\n\n  const versionRef = useRef(0);\n  const listenerRef = useRef<(() => void) | null>(null);\n\n  const subscribe = useCallback((listener: () => void) => {\n    listenerRef.current = listener;\n    return () => {\n      listenerRef.current = null;\n    };\n  }, []);\n\n  const getSnapshot = useCallback(() => versionRef.current, []);\n\n  useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n  const emitChange = () => {\n    versionRef.current += 1;\n    listenerRef.current?.();\n  };\n\n  // ******************\n  // Utils\n  // ******************\n\n  const getStaleStatus = (): boolean => {\n    const cacheData = cache.get(scopeKey(cacheKey, request.scope));\n    return !cacheData || isStaleCacheData(staleTime, cacheData?.responseTimestamp);\n  };\n\n  // ******************\n  // Dependency Tracking\n  // ******************\n\n  const renderKeyTrigger = (keys: Array<keyof UseTrackedStateType>) => {\n    const shouldRerender = renderKeys.current.some((renderKey) => keys.includes(renderKey));\n    if (shouldRerender) emitChange();\n  };\n\n  const setRenderKey = (renderKey: keyof UseTrackedStateType) => {\n    if (!renderKeys.current.includes(renderKey)) {\n      renderKeys.current.push(renderKey);\n    }\n  };\n\n  // ******************\n  // Cache initialization\n  // ******************\n\n  useDidUpdate(\n    () => {\n      const oldKey = previousCacheKey.current;\n      previousCacheKey.current = cacheKey;\n\n      // Get cache state\n      const cacheData = cache.get<ExtractResponseType<T>, ExtractErrorType<T>>(cacheKey);\n      const cacheState = getValidCacheData<T>(request, initialResponse, cacheData);\n\n      // Determine whether to clear state based on keepPreviousData mode\n      const shouldClear = getShouldClearState(keepPreviousData, oldKey, cacheKey);\n\n      if (shouldClear && !cacheState) {\n        // Reset state to initial values when no cached data exists for the new key\n        const resetState = getInitialState({ initialResponse, dispatcher, request, disabled, revalidate });\n        state.current = resetState;\n        renderKeyTrigger(Object.keys(state.current) as (keyof UseTrackedStateType<T>)[]);\n      } else if (cacheState) {\n        state.current.loading = getIsInitiallyLoading({\n          queryKey: scopeKey(request.queryKey, request.scope),\n          dispatcher,\n          disabled,\n          revalidate,\n          hasState: true,\n        });\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        setCacheData(cacheState);\n      }\n      // When state is preserved and no cache exists (e.g. query param change in \"auto\" mode),\n      // don't update loading on the ref — let the dispatcher's loading event handle it (#126)\n    },\n    [cacheKey, queryKey],\n    true,\n  );\n\n  // ******************\n  // Turn off dependency tracking\n  // ******************\n\n  useDidUpdate(\n    () => {\n      const handleDependencyTracking = () => {\n        if (!dependencyTracking) {\n          Object.keys(state.current).forEach((key) => setRenderKey(key as Parameters<typeof setRenderKey>[0]));\n        }\n      };\n\n      handleDependencyTracking();\n    },\n    [dependencyTracking],\n    true,\n  );\n\n  // ******************\n  // Cache data handler\n  // ******************\n\n  const handleCompare = (firstValue: unknown, secondValue: unknown) => {\n    if (typeof deepCompare === \"function\") {\n      return deepCompare(firstValue, secondValue);\n    }\n    if (deepCompare) {\n      return isEqual(firstValue, secondValue);\n    }\n    return false;\n  };\n\n  const handleCacheData = (\n    cacheData: CacheValueType<ExtractResponseType<T>, ExtractErrorType<T>, ExtractAdapterType<T>>,\n  ) => {\n    const newStateValues: UseTrackedStateType<T> = {\n      data: cacheData.data,\n      error: cacheData.error,\n      status: cacheData.status,\n      success: cacheData.success,\n      extra: cacheData.extra as ExtractAdapterExtraType<ExtractAdapterType<T>>,\n      retries: cacheData.retries,\n      responseTimestamp: new Date(cacheData.responseTimestamp),\n      requestTimestamp: new Date(cacheData.requestTimestamp),\n      loading: dispatcher.hasRunningRequests(queryKey),\n    };\n\n    const changedKeys = Object.keys(newStateValues).filter((key) => {\n      const keyValue = key as keyof UseTrackedStateType<T>;\n      const firstValue = state.current[keyValue];\n      const secondValue = newStateValues[keyValue];\n\n      return !handleCompare(firstValue, secondValue);\n    }) as unknown as (keyof UseTrackedStateType<T>)[];\n\n    state.current = {\n      ...state.current,\n      ...newStateValues,\n    };\n\n    renderKeyTrigger(changedKeys);\n  };\n\n  const setIsDataProcessing = ({\n    processingCacheKey,\n    isProcessing,\n  }: {\n    processingCacheKey: string;\n    isProcessing: boolean;\n  }) => {\n    if (isProcessing) {\n      isProcessingData.current = processingCacheKey;\n    }\n    // Do not turn off other keys processing\n    else if (isProcessingData.current === cacheKey) {\n      isProcessingData.current = \"\";\n    }\n  };\n\n  const getIsDataProcessing = (processingCacheKey: string) => {\n    return isProcessingData.current === processingCacheKey;\n  };\n\n  const setCacheData = (\n    cacheData: CacheValueType<ExtractResponseType<T>, ExtractErrorType<T>, ExtractAdapterType<T>>,\n  ): Promise<void> | void => {\n    setIsDataProcessing({ processingCacheKey: cacheKey, isProcessing: true });\n    const data = unstable_responseMapper\n      ? unstable_responseMapper(cacheData as ResponseType<any, any, ExtractAdapterType<T>>)\n      : cacheData;\n\n    if (data instanceof Promise) {\n      return (async () => {\n        const promiseData = await data;\n        handleCacheData({ ...cacheData, ...promiseData } as CacheValueType<\n          ExtractResponseType<T>,\n          ExtractErrorType<T>,\n          ExtractAdapterType<T>\n        >);\n        setIsDataProcessing({ processingCacheKey: cacheKey, isProcessing: false });\n      })();\n    }\n    setIsDataProcessing({ processingCacheKey: cacheKey, isProcessing: false });\n    return handleCacheData({ ...cacheData, ...data } as CacheValueType<\n      ExtractResponseType<T>,\n      ExtractErrorType<T>,\n      ExtractAdapterType<T>\n    >);\n  };\n\n  // ******************\n  // Actions\n  // ******************\n\n  const actions: UseTrackedStateActions<T> = {\n    setData: (data) => {\n      state.current.data = data instanceof Function ? data(state.current.data || null) : data;\n      renderKeyTrigger([\"data\"]);\n    },\n    setError: (error) => {\n      state.current.error = error instanceof Function ? error(state.current.error || null) : error;\n      renderKeyTrigger([\"error\"]);\n    },\n    setLoading: (loading) => {\n      const value = loading instanceof Function ? loading(state.current.loading) : loading;\n      if (value === state.current.loading) return;\n      state.current.loading = value;\n      renderKeyTrigger([\"loading\"]);\n    },\n    setStatus: (status) => {\n      const value = status instanceof Function ? status(state.current.status) : status;\n      if (value === state.current.status) return;\n      state.current.status = status instanceof Function ? status(state.current.status || null) : status;\n      renderKeyTrigger([\"status\"]);\n    },\n    setSuccess: (success) => {\n      const value = success instanceof Function ? success(state.current.success || false) : success;\n      if (value === state.current.success) return;\n      state.current.success = success instanceof Function ? success(state.current.success || false) : success;\n      renderKeyTrigger([\"success\"]);\n    },\n    setExtra: (extra) => {\n      const value = extra instanceof Function ? extra(state.current.extra) : extra;\n      if (value === state.current.extra) return;\n      state.current.extra = extra instanceof Function ? extra(state.current.extra) : extra;\n      renderKeyTrigger([\"extra\"]);\n    },\n    setRetries: (retries) => {\n      const value = retries instanceof Function ? retries(state.current.retries || 0) : retries;\n      if (value === state.current.retries) return;\n      state.current.retries = retries instanceof Function ? retries(state.current.retries || 0) : retries;\n      renderKeyTrigger([\"retries\"]);\n    },\n    setResponseTimestamp: (timestamp) => {\n      const value = timestamp instanceof Function ? timestamp(state.current.responseTimestamp) : timestamp;\n      if (value === state.current.responseTimestamp) return;\n      const getTimestamp = (prev: Date | null) => {\n        return timestamp instanceof Function ? timestamp(prev ? new Date(prev) : null) : timestamp;\n      };\n\n      state.current.responseTimestamp = getTimestamp(state.current.responseTimestamp);\n      renderKeyTrigger([\"responseTimestamp\"]);\n    },\n    setRequestTimestamp: (timestamp) => {\n      const value = timestamp instanceof Function ? timestamp(state.current.requestTimestamp) : timestamp;\n      if (value === state.current.requestTimestamp) return;\n      const getTimestamp = (prev: Date | null) => {\n        return timestamp instanceof Function ? timestamp(prev ? new Date(prev) : null) : timestamp;\n      };\n\n      state.current.requestTimestamp = getTimestamp(state.current.requestTimestamp);\n      renderKeyTrigger([\"requestTimestamp\"]);\n    },\n    clearState: () => {\n      state.current = {\n        data: null,\n        error: null,\n        loading: false,\n        status: null,\n        success: false,\n        extra: null,\n        retries: 0,\n        responseTimestamp: null,\n        requestTimestamp: null,\n      } as UseTrackedStateType<T>;\n      renderKeyTrigger(Object.keys(state.current) as (keyof UseTrackedStateType<T>)[]);\n    },\n  };\n\n  return [state.current, actions, { setRenderKey, setCacheData, getStaleStatus, getIsDataProcessing }];\n};\n","import type { SocketInstance, ExtractSocketExtraType } from \"@hyper-fetch/sockets\";\nimport { useDidMount, useDidUpdate } from \"@better-hooks/lifecycle\";\nimport { useCallback, useRef, useSyncExternalStore } from \"react\";\n\nimport type { UseSocketStateType, UseSocketStateProps } from \"helpers\";\n\nexport const useSocketState = <DataType, Socket extends SocketInstance>(\n  socket: Socket,\n  { dependencyTracking }: UseSocketStateProps,\n) => {\n  const onDisconnectCallback = useRef<null | VoidFunction>(null);\n  const onErrorCallback = useRef<null | ((event: any) => void)>(null);\n  const onConnectedCallback = useRef<null | VoidFunction>(null);\n  const onConnectingCallback = useRef<null | VoidFunction>(null);\n  const onReconnectingCallback = useRef<null | ((data: { attempts: number }) => void)>(null);\n  const onReconnectingFailedCallback = useRef<null | ((data: { attempts: number }) => void)>(null);\n\n  const state = useRef<UseSocketStateType<Socket, DataType>>({\n    data: null,\n    extra: null,\n    connected: socket.adapter.connected,\n    connecting: socket.adapter.connecting,\n    timestamp: null,\n  });\n  const renderKeys = useRef<Array<keyof UseSocketStateType<Socket, DataType>>>([]);\n\n  // ******************\n  // useSyncExternalStore\n  // ******************\n\n  const versionRef = useRef(0);\n  const listenerRef = useRef<(() => void) | null>(null);\n\n  const subscribe = useCallback((listener: () => void) => {\n    listenerRef.current = listener;\n    return () => {\n      listenerRef.current = null;\n    };\n  }, []);\n\n  const getSnapshot = useCallback(() => versionRef.current, []);\n\n  useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n  const emitChange = () => {\n    versionRef.current += 1;\n    listenerRef.current?.();\n  };\n\n  // ******************\n  // Dependency Tracking\n  // ******************\n\n  const renderKeyTrigger = (keys: Array<keyof UseSocketStateType<Socket, DataType>>) => {\n    const shouldRerender = renderKeys.current.some((renderKey) => keys.includes(renderKey));\n    if (shouldRerender) emitChange();\n  };\n\n  const setRenderKey = (renderKey: keyof UseSocketStateType<Socket, DataType>) => {\n    if (!renderKeys.current.includes(renderKey)) {\n      renderKeys.current.push(renderKey);\n    }\n  };\n\n  // ******************\n  // Turn off dependency tracking\n  // ******************\n\n  useDidUpdate(\n    () => {\n      const handleDependencyTracking = () => {\n        if (!dependencyTracking) {\n          Object.keys(state.current).forEach((key) => setRenderKey(key as Parameters<typeof setRenderKey>[0]));\n        }\n      };\n\n      handleDependencyTracking();\n    },\n    [dependencyTracking],\n    true,\n  );\n\n  // ******************\n  // Actions\n  // ******************\n\n  const actions = {\n    setData: (data: DataType | null) => {\n      state.current.data = data;\n      renderKeyTrigger([\"data\"]);\n    },\n    setExtra: (extra: ExtractSocketExtraType<Socket> | null) => {\n      state.current.extra = extra;\n      renderKeyTrigger([\"extra\"]);\n    },\n    setConnected: (connected: boolean) => {\n      state.current.connected = connected;\n      renderKeyTrigger([\"connected\"]);\n    },\n    setConnecting: (connecting: boolean) => {\n      state.current.connecting = connecting;\n      renderKeyTrigger([\"connecting\"]);\n    },\n    setTimestamp: (timestamp: number | null) => {\n      state.current.timestamp = timestamp;\n      renderKeyTrigger([\"timestamp\"]);\n    },\n    clearState: () => {\n      state.current = {\n        data: null,\n        extra: null,\n        connected: false,\n        connecting: false,\n        timestamp: null,\n      };\n      renderKeyTrigger(Object.keys(state.current) as (keyof UseSocketStateType<Socket, DataType>)[]);\n    },\n  };\n\n  const callbacks = {\n    onConnected: (callback: VoidFunction) => {\n      onConnectedCallback.current = callback;\n    },\n    onDisconnected: (callback: VoidFunction) => {\n      onDisconnectCallback.current = callback;\n    },\n    onError: <ErrorType = Event>(callback: (event: ErrorType) => void) => {\n      onErrorCallback.current = callback;\n    },\n    onConnecting: (callback: VoidFunction) => {\n      onConnectingCallback.current = callback;\n    },\n    onReconnecting: (callback: (data: { attempts: number }) => void) => {\n      onReconnectingCallback.current = callback;\n    },\n    onReconnectingFailed: (callback: (data: { attempts: number }) => void) => {\n      onReconnectingFailedCallback.current = callback;\n    },\n  };\n\n  // ******************\n  // Hook to events\n  // ******************\n\n  useDidMount(() => {\n    const umountOnError = socket.events.onError((event) => {\n      onErrorCallback.current?.(event);\n    });\n    const umountOnConnecting = socket.events.onConnecting(({ connecting }) => {\n      actions.setConnecting(connecting);\n      onConnectingCallback.current?.();\n    });\n    const umountOnOpen = socket.events.onConnected(() => {\n      actions.setConnected(true);\n      onConnectedCallback.current?.();\n    });\n    const umountOnClose = socket.events.onDisconnected(() => {\n      actions.setConnected(false);\n      onDisconnectCallback.current?.();\n    });\n    const umountOnReconnecting = socket.events.onReconnecting(({ attempts }) => {\n      onReconnectingCallback.current?.({ attempts });\n    });\n    const umountOnReconnectingFailed = socket.events.onReconnectingFailed(({ attempts }) => {\n      onReconnectingFailedCallback.current?.({ attempts });\n    });\n\n    return () => {\n      umountOnError();\n      umountOnConnecting();\n      umountOnOpen();\n      umountOnClose();\n      umountOnReconnecting();\n      umountOnReconnectingFailed();\n    };\n  });\n\n  return [state.current, actions, callbacks, { setRenderKey }] as const;\n};\n","import type { SocketInstance } from \"@hyper-fetch/sockets\";\n\nimport type { UseSocketStateType } from \"./use-socket-state.types\";\n\nexport const initialSocketState: UseSocketStateType<SocketInstance> = {\n  data: null,\n  extra: null,\n  connected: false,\n  connecting: false,\n  timestamp: null,\n};\n","import React, { useContext, useMemo, useState } from \"react\";\n\nimport type { ProviderProps, ProviderValueType } from \"./provider.types\";\n\nconst ConfigContext = React.createContext<ProviderValueType>({\n  config: {},\n  setConfig: () => null,\n});\n\n/**\n * Provider with configuration for hooks\n * @param options\n * @returns\n */\nexport const Provider = ({ children, config }: ProviderProps) => {\n  const [currentConfig, setConfig] = useState(config || {});\n\n  const value = useMemo(() => {\n    const contextValue: ProviderValueType = { config: currentConfig, setConfig };\n    return contextValue;\n  }, [currentConfig]);\n\n  return <ConfigContext.Provider value={value}>{children}</ConfigContext.Provider>;\n};\n\n/**\n * Hook to allow reading current context config\n * @returns\n */\nexport const useProvider = (): ProviderValueType => {\n  const config = useContext(ConfigContext);\n  return config;\n};\n","import { useDidUpdate, useDidMount, useWillUnmount } from \"@better-hooks/lifecycle\";\nimport { useDebounce, useThrottle } from \"@better-hooks/performance\";\nimport type {\n  RequestInstance,\n  ExtractAdapterStatusType,\n  ExtractAdapterType,\n  ExtractAdapterExtraType,\n} from \"@hyper-fetch/core\";\nimport { scopeKey } from \"@hyper-fetch/core\";\nimport { useRef } from \"react\";\n\nimport { useRequestEvents, useTrackedState } from \"helpers\";\nimport type { UseFetchOptionsType, UseFetchReturnType } from \"hooks/use-fetch\";\nimport { useFetchDefaultOptions } from \"hooks/use-fetch\";\nimport { useProvider } from \"provider\";\nimport { createTrackedProxy, getBounceData } from \"utils\";\n\ntype SuspenseEntry = { promise: Promise<void>; resolve: () => void; cleanup: () => void };\nconst suspensePromiseMap = new Map<string, SuspenseEntry>();\nconst suspenseResultMap = new Map<string, { data: any; error: any; status: any; extra: any; success: boolean }>();\n\n/**\n * This hooks aims to retrieve data from server.\n * @param request Request instance\n * @param options Hook options\n * @returns\n */\nexport const useFetch = <R extends RequestInstance>(\n  request: R,\n  options?: UseFetchOptionsType<R>,\n): UseFetchReturnType<R> => {\n  // Build the configuration options\n  const { config: globalConfig } = useProvider();\n  const {\n    suspense,\n    dependencies,\n    disabled,\n    dependencyTracking,\n    revalidate,\n    initialResponse,\n    keepPreviousData,\n    refresh,\n    refreshTime,\n    refetchBlurred,\n    refetchOnBlur,\n    refetchOnFocus,\n    refetchOnReconnect,\n    bounce,\n    bounceType,\n    bounceTime,\n    bounceTimeout,\n    deepCompare,\n  } = {\n    ...useFetchDefaultOptions,\n    ...globalConfig.useFetchConfig,\n    ...options,\n  };\n\n  const updateKey = JSON.stringify(request.toJSON());\n  const requestDebounce = useDebounce({ delay: bounceTime });\n  const requestThrottle = useThrottle({ interval: bounceTime, timeout: bounceTimeout });\n  const refreshDebounce = useDebounce({ delay: refreshTime });\n\n  const { cacheKey, queryKey, client } = request;\n  const { cache, fetchDispatcher: dispatcher, appManager, loggerManager } = client;\n\n  const ignoreReact18DoubleRender = useRef(true);\n  const logger = useRef(loggerManager.initialize(client, \"useFetch\")).current;\n  const bounceData = bounceType === \"throttle\" ? requestThrottle : requestDebounce;\n  const bounceFunction = bounceType === \"throttle\" ? requestThrottle.throttle : requestDebounce.debounce;\n\n  /**\n   * State handler with optimization for re-rendering, that hooks into the cache state and dispatchers queues\n   */\n  const [state, actions, { setRenderKey, setCacheData, getStaleStatus, getIsDataProcessing }] = useTrackedState<R>({\n    logger,\n    request: request as unknown as R,\n    dispatcher,\n    initialResponse,\n    deepCompare,\n    dependencyTracking,\n    keepPreviousData,\n    disabled,\n    revalidate,\n  });\n\n  /**\n   * Handles the data exchange with the core logic - responses, loading, downloading etc\n   */\n  const [callbacks, listeners] = useRequestEvents<R>({\n    logger,\n    actions,\n    request: request as unknown as R,\n    dispatcher,\n    setCacheData,\n    getIsDataProcessing,\n  });\n\n  const { addCacheDataListener, addLifecycleListeners, clearCacheDataListener } = listeners;\n\n  // ******************\n  // Fetching\n  // ******************\n  const handleFetch = () => {\n    if (!disabled) {\n      logger.debug({ title: `Fetching data`, type: \"system\", extra: { request } });\n      dispatcher.add(request as unknown as R);\n    } else {\n      logger.debug({ title: `Cannot add to fetch queue`, type: \"system\", extra: { disabled } });\n    }\n  };\n\n  // ******************\n  // Refreshing\n  // ******************\n\n  function handleRefresh() {\n    if (!refresh || disabled) {\n      refreshDebounce.reset();\n      return;\n    }\n\n    refreshDebounce.debounce(() => {\n      const isBlurred = !appManager.isFocused;\n\n      // If window tab is not active should we refresh the cache\n      const scopedQueryKey = scopeKey(request.queryKey, request.scope);\n      const isFetching = dispatcher.hasRunningRequests(scopedQueryKey);\n      const isQueued = dispatcher.getIsActiveQueue(scopedQueryKey);\n      const isActive = isFetching || isQueued;\n      const canRefreshBlurred = isBlurred && refetchBlurred && !isActive;\n      const canRefreshFocused = !isBlurred && !isActive;\n\n      if (canRefreshBlurred || canRefreshFocused) {\n        handleFetch();\n        logger.debug({ title: `Performing refresh request`, type: \"system\", extra: { request } });\n      }\n\n      // Start new refresh counter\n      handleRefresh();\n    });\n  }\n\n  const refetch = () => {\n    handleFetch();\n    handleRefresh();\n  };\n\n  // ******************\n  // Fetching lifecycle\n  // ******************\n\n  // This help us to check for currently running requests\n  const getIsFetchingIdentity = () => {\n    // We need to check if the queryKey have the same cacheKey elements ongoing\n    return dispatcher.getRunningRequests(queryKey).some((running) => running.request.cacheKey === cacheKey);\n  };\n\n  const initialFetchData = () => {\n    const hasStaleData = getStaleStatus();\n    const isFetching = getIsFetchingIdentity();\n    if ((revalidate || hasStaleData) && !isFetching) {\n      handleFetch();\n    }\n  };\n\n  const updateFetchData = () => {\n    const hasStaleData = getStaleStatus();\n    const shouldUpdate = !revalidate ? hasStaleData : true;\n    /**\n     * This is a hack to avoid double rendering in React 18\n     * It renders initial mount event and allow us to consume only hook updates\n     */\n    if (!ignoreReact18DoubleRender.current && shouldUpdate) {\n      /**\n       * While debouncing we need to make sure that first request is not debounced when the cache is not available\n       * This way it will not wait for debouncing but fetch data right away\n       */\n      if (bounce) {\n        logger.debug({ title: `Bounce request with ${bounceType}`, type: \"system\", extra: { queryKey, request } });\n        bounceFunction(() => handleFetch());\n      } else {\n        handleFetch();\n      }\n    } else {\n      ignoreReact18DoubleRender.current = false;\n    }\n  };\n\n  // ******************\n  // Events\n  // ******************\n\n  const handleMountEvents = () => {\n    addCacheDataListener(request as unknown as R);\n    addLifecycleListeners(request as unknown as R);\n\n    const focusUnmount = appManager.events.onFocus(() => {\n      if (refetchOnFocus && !disabled) {\n        handleFetch();\n        handleRefresh();\n      }\n    });\n    const blurUnmount = appManager.events.onBlur(() => {\n      if (refetchOnBlur && !disabled) {\n        handleFetch();\n        handleRefresh();\n      }\n    });\n    const onlineUnmount = appManager.events.onOnline(() => {\n      if (refetchOnReconnect && !disabled) {\n        handleFetch();\n        handleRefresh();\n      }\n    });\n\n    const invalidateUnmount = cache.events.onInvalidateByKey(cacheKey, handleFetch);\n    const deletionUnmount = cache.events.onDeleteByKey(cacheKey, handleFetch);\n\n    const unmount = () => {\n      clearCacheDataListener();\n      focusUnmount();\n      blurUnmount();\n      onlineUnmount();\n      invalidateUnmount();\n      deletionUnmount();\n    };\n\n    return unmount;\n  };\n\n  // ******************\n  // Lifecycle\n  // ******************\n\n  /**\n   * Initialization of the events related to data exchange with cache and queue\n   * This allows to share the state with other hooks and keep it related\n   */\n  useDidUpdate(handleMountEvents, [updateKey, disabled], true);\n\n  /**\n   * Initial fetch triggered once data is stale or we use the refetch strategy\n   */\n  useDidMount(initialFetchData);\n\n  /**\n   * Fetching logic for updates handling\n   */\n  useDidUpdate(updateFetchData, [updateKey, disabled, ...dependencies], true);\n\n  /**\n   * Refresh lifecycle handler\n   */\n  useDidUpdate(handleRefresh, [updateKey, ...dependencies, disabled, refresh, refreshTime], true);\n\n  /**\n   * Reset the ignore flag for React 18 strict mode\n   */\n  useWillUnmount(() => {\n    ignoreReact18DoubleRender.current = true;\n  });\n\n  // ******************\n  // Suspense\n  // ******************\n  if (suspense && !disabled) {\n    // Apply any cached suspense result (covers error responses that aren't stored in cache)\n    const suspenseResult = suspenseResultMap.get(cacheKey);\n    if (suspenseResult) {\n      suspenseResultMap.delete(cacheKey);\n      if (suspenseResult.data !== null) state.data = suspenseResult.data;\n      if (suspenseResult.error !== null) state.error = suspenseResult.error;\n      if (suspenseResult.status !== null) state.status = suspenseResult.status;\n      if (suspenseResult.extra !== null) state.extra = suspenseResult.extra;\n      state.success = suspenseResult.success;\n    }\n\n    const hasData = state.data !== null || state.error !== null;\n\n    if (!hasData) {\n      let entry = suspensePromiseMap.get(cacheKey);\n      if (!entry) {\n        let resolvePromise: () => void;\n        const promise = new Promise<void>((r) => {\n          resolvePromise = r;\n        });\n\n        const unsubscribe = cache.events.onDataByKey(cacheKey, (cacheData: any) => {\n          suspenseResultMap.set(cacheKey, {\n            data: cacheData.data ?? null,\n            error: cacheData.error ?? null,\n            status: cacheData.status ?? null,\n            extra: cacheData.extra ?? null,\n            success: cacheData.success ?? false,\n          });\n          resolvePromise();\n          unsubscribe();\n          suspensePromiseMap.delete(cacheKey);\n        });\n\n        entry = { promise, resolve: resolvePromise!, cleanup: unsubscribe };\n        suspensePromiseMap.set(cacheKey, entry);\n      }\n\n      // Ensure the request is dispatched before suspending —\n      // effects never run when a component suspends.\n      if (!dispatcher.hasRunningRequests(queryKey)) {\n        dispatcher.add(request as unknown as R);\n      }\n\n      throw entry.promise;\n    }\n\n    // Data has arrived — clean up any leftover entry\n    const entry = suspensePromiseMap.get(cacheKey);\n    if (entry) {\n      entry.cleanup();\n      suspensePromiseMap.delete(cacheKey);\n    }\n  }\n\n  const trackedKeys = [\n    \"data\",\n    \"error\",\n    \"loading\",\n    \"status\",\n    \"success\",\n    \"extra\",\n    \"retries\",\n    \"responseTimestamp\",\n    \"requestTimestamp\",\n  ] as const;\n\n  return createTrackedProxy(\n    {\n      data: state.data,\n      error: state.error,\n      loading: state.loading,\n      status: state.status as ExtractAdapterStatusType<ExtractAdapterType<R>>,\n      success: state.success,\n      extra: state.extra as ExtractAdapterExtraType<ExtractAdapterType<R>>,\n      retries: state.retries,\n      responseTimestamp: state.responseTimestamp,\n      requestTimestamp: state.requestTimestamp,\n      bounce: getBounceData(bounceData),\n      ...actions,\n      ...(callbacks as any),\n      refetch,\n    },\n    trackedKeys,\n    setRenderKey,\n  ) as UseFetchReturnType<R>;\n};\n","export const getRefreshTime = (refreshTime: number, dataTimestamp?: Date) => {\n  if (dataTimestamp) {\n    const timeDiff = Date.now() - +dataTimestamp;\n    return timeDiff < refreshTime ? refreshTime - timeDiff : refreshTime;\n  }\n  return refreshTime;\n};\n","import type { RequestInstance, RequiredKeys } from \"@hyper-fetch/core\";\nimport { Time } from \"@hyper-fetch/core\";\n\nimport type { UseFetchOptionsType } from \"hooks/use-fetch\";\n\ntype DefaultOptionsType = RequiredKeys<Omit<UseFetchOptionsType<RequestInstance>, \"initialResponse\">> & {\n  initialResponse: null;\n};\n\nexport const useFetchDefaultOptions: DefaultOptionsType = {\n  suspense: false,\n  dependencies: [],\n  disabled: false,\n  dependencyTracking: true,\n  revalidate: true,\n  initialResponse: null,\n  keepPreviousData: \"auto\",\n  refresh: false,\n  refreshTime: Time.HOUR,\n  refetchBlurred: true,\n  refetchOnBlur: false,\n  refetchOnFocus: false,\n  refetchOnReconnect: false,\n  bounce: false,\n  bounceType: \"debounce\",\n  bounceTime: 400,\n  bounceTimeout: 400,\n  deepCompare: true,\n};\n","import type {\n  ExtractAdapterResolvedType,\n  RequestInstance,\n  ResponseType,\n  ExtractResponseType,\n  ExtractErrorType,\n  RequestSendOptionsType,\n  RequestSendType,\n  ExtractAdapterType,\n} from \"@hyper-fetch/core\";\nimport { sendRequest } from \"@hyper-fetch/core\";\nimport { useDidMount } from \"@better-hooks/lifecycle\";\nimport { useDebounce, useThrottle } from \"@better-hooks/performance\";\nimport { useMemo, useRef } from \"react\";\n\nimport type { UseSubmitOptionsType, UseSubmitReturnType } from \"hooks/use-submit\";\nimport { useSubmitDefaultOptions } from \"hooks/use-submit\";\nimport type { UseTrackedStateType } from \"helpers\";\nimport { useTrackedState, useRequestEvents } from \"helpers\";\nimport { useProvider } from \"provider\";\nimport { createTrackedProxy, getBounceData } from \"utils\";\n\n/**\n * This hooks aims to mutate data on the server.\n * @param request\n * @param options\n * @returns\n */\nexport const useSubmit = <RequestType extends RequestInstance>(\n  request: RequestType,\n  options?: UseSubmitOptionsType<RequestType>,\n): UseSubmitReturnType<RequestType> => {\n  // Build the configuration options\n  const { config: globalConfig } = useProvider();\n  const mergedOptions: UseSubmitOptionsType<RequestType> = useMemo(\n    () => ({\n      ...useSubmitDefaultOptions,\n      ...globalConfig.useSubmitConfig,\n      ...options,\n    }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [globalConfig.useSubmitConfig, JSON.stringify(options), options?.deepCompare],\n  );\n  const { disabled, dependencyTracking, initialResponse, bounce, bounceType, bounceTime, deepCompare } = mergedOptions;\n\n  /**\n   * Because of the dynamic cacheKey / queryKey signing within the request we need to store it's latest instance\n   * so the events got triggered properly and show the latest result without mixing it up\n   */\n  const { client } = request;\n  const { cache, submitDispatcher: dispatcher, loggerManager } = client;\n\n  const logger = useRef(loggerManager.initialize(client, \"useSubmit\")).current;\n  const requestDebounce = useDebounce({ delay: bounceTime });\n  const requestThrottle = useThrottle({\n    interval: bounceTime,\n    timeout: \"bounceTimeout\" in mergedOptions ? mergedOptions.bounceTimeout : bounceTime,\n  });\n  const bounceResolver = useRef<\n    (\n      value: ResponseType<\n        ExtractResponseType<RequestType>,\n        ExtractErrorType<RequestType>,\n        ExtractAdapterType<RequestType>\n      >,\n    ) => void\n  >(() => null);\n\n  const bounceData = bounceType === \"throttle\" ? requestThrottle : requestDebounce;\n  const bounceFunction = bounceType === \"throttle\" ? requestThrottle.throttle : requestDebounce.debounce;\n\n  /**\n   * State handler with optimization for rerendering, that hooks into the cache state and dispatchers queues\n   */\n  const [state, actions, { setRenderKey, setCacheData, getIsDataProcessing }] = useTrackedState<RequestType>({\n    logger,\n    request,\n    dispatcher,\n    initialResponse,\n    deepCompare: deepCompare as boolean,\n    dependencyTracking: dependencyTracking as boolean,\n  });\n\n  /**\n   * Handles the data exchange with the core logic - responses, loading, downloading etc\n   */\n  const [callbacks, listeners] = useRequestEvents({\n    logger,\n    actions,\n    request,\n    dispatcher,\n    setCacheData,\n    getIsDataProcessing,\n  });\n\n  const { addCacheDataListener, addLifecycleListeners } = listeners;\n\n  // ******************\n  // Submitting\n  // ******************\n\n  const handleSubmit: RequestSendType<RequestType> = (submitOptions?: RequestSendOptionsType<RequestType>) => {\n    const requestClone = request.clone(submitOptions as any) as unknown as RequestType;\n\n    if (disabled) {\n      logger.warning({ title: `Cannot submit request`, type: \"system\", extra: { disabled, submitOptions } });\n      return Promise.resolve({\n        data: null,\n        error: new Error(\"Cannot submit request. Option 'disabled' is enabled\"),\n        status: null,\n        extra: request.client.adapter.defaultExtra,\n      }) as Promise<\n        ResponseType<ExtractResponseType<RequestType>, ExtractErrorType<RequestType>, ExtractAdapterType<RequestType>>\n      >;\n    }\n\n    const triggerRequest = () => {\n      addCacheDataListener(requestClone);\n\n      const configuration: RequestSendOptionsType<RequestType> = {\n        dispatcherType: \"submit\",\n        ...(submitOptions as RequestSendOptionsType<RequestType>),\n        onBeforeSent: (data) => {\n          addLifecycleListeners(requestClone, data.requestId, data.mutationContext);\n          submitOptions?.onBeforeSent?.(data);\n        },\n      };\n\n      return sendRequest(requestClone, configuration);\n    };\n\n    return new Promise<ExtractAdapterResolvedType<RequestType>>((resolve) => {\n      const performSubmit = async () => {\n        logger.debug({ title: `Submitting request`, type: \"system\", extra: { disabled, submitOptions } });\n        if (bounce) {\n          const bouncedResolve = bounceResolver.current;\n          // We need to keep the resolve of debounced requests to prevent memory leaks - we need to always resolve promise.\n          // By default bounce method will prevent function to be triggered, but returned promise will still await to be resolved.\n          // This way we can close previous promise, making sure our logic will not stuck in memory.\n          bounceResolver.current = (\n            value: ResponseType<\n              ExtractResponseType<RequestType>,\n              ExtractErrorType<RequestType>,\n              ExtractAdapterType<RequestType>\n            >,\n          ) => {\n            // Trigger previous awaiting calls to resolve together in bounced batches\n            bouncedResolve(value);\n            resolve(value);\n          };\n\n          // Start bounce\n          bounceFunction(async () => {\n            // We will always resolve previous calls as we stack the callbacks together until bounce function trigger\n            const callback = bounceResolver.current;\n            // Clean bounce resolvers to start the new stack\n            bounceResolver.current = () => null;\n\n            const value = await triggerRequest();\n            callback(value);\n          });\n        } else {\n          const value = await triggerRequest();\n          resolve(value);\n        }\n      };\n\n      performSubmit();\n    });\n  };\n\n  // ******************\n  // Invalidation\n  // ******************\n\n  const refetch = () => {\n    cache.invalidate(request);\n  };\n\n  // ******************\n  // Misc\n  // ******************\n\n  const handlers = {\n    onSubmitSuccess: callbacks.onSuccess,\n    onSubmitError: callbacks.onError,\n    onSubmitFinished: callbacks.onFinished,\n    onSubmitRequestStart: callbacks.onRequestStart,\n    onSubmitResponseStart: callbacks.onResponseStart,\n    onSubmitDownloadProgress: callbacks.onDownloadProgress,\n    onSubmitUploadProgress: callbacks.onUploadProgress,\n    onSubmitOfflineError: callbacks.onOfflineError,\n    onSubmitAbort: callbacks.onAbort,\n  };\n\n  // ******************\n  // Lifecycle\n  // ******************\n\n  useDidMount(() => {\n    addCacheDataListener(request);\n  });\n\n  const setSubmitRenderKey = (key: string) => {\n    setRenderKey((key === \"submitting\" ? \"loading\" : key) as keyof UseTrackedStateType);\n  };\n\n  const trackedKeys = [\n    \"data\",\n    \"error\",\n    \"submitting\",\n    \"status\",\n    \"success\",\n    \"extra\",\n    \"retries\",\n    \"responseTimestamp\",\n    \"requestTimestamp\",\n  ] as const;\n\n  return createTrackedProxy(\n    {\n      submit: handleSubmit,\n      data: state.data,\n      error: state.error,\n      submitting: state.loading,\n      status: state.status,\n      success: state.success,\n      extra: state.extra,\n      retries: state.retries,\n      responseTimestamp: state.responseTimestamp,\n      requestTimestamp: state.requestTimestamp,\n      abort: callbacks.abort,\n      ...actions,\n      ...handlers,\n      bounce: getBounceData(bounceData),\n      refetch,\n    },\n    trackedKeys,\n    setSubmitRenderKey,\n  ) as UseSubmitReturnType<RequestType>;\n};\n","import type { RequestInstance, RequiredKeys } from \"@hyper-fetch/core\";\n\nimport type { UseSubmitOptionsType } from \"./use-submit.types\";\n\ntype DefaultOptionsType = RequiredKeys<Omit<UseSubmitOptionsType<RequestInstance>, \"initialResponse\">> & {\n  initialResponse: null;\n};\n\nexport const useSubmitDefaultOptions: DefaultOptionsType = {\n  disabled: false,\n  dependencyTracking: true,\n  initialResponse: null,\n  bounce: false,\n  bounceType: \"debounce\",\n  bounceTime: 400,\n  deepCompare: true,\n};\n","import type { RequestInstance, ResolvedQueueItemType, QueueDataType, QueueItemType } from \"@hyper-fetch/core\";\nimport { Request, getRequestDispatcher, scopeKey } from \"@hyper-fetch/core\";\nimport { useState, useEffect, useCallback } from \"react\";\n\nimport type { UseQueueOptionsType, QueueRequest, UseQueueReturnType } from \"hooks/use-queue\";\nimport { useQueueDefaultOptions } from \"hooks/use-queue\";\nimport { useProvider } from \"provider\";\n\nconst canUpdate = (\n  item: Pick<QueueRequest<RequestInstance>, \"success\" | \"failed\" | \"canceled\" | \"removed\" | \"resolved\">,\n) => {\n  if (item.success || item.failed) {\n    return false;\n  }\n  return true;\n};\n\n/**\n * This hook allows to control dispatchers request queues\n * @param request\n * @param options\n * @returns\n */\nexport const useQueue = <Request extends RequestInstance>(\n  request: Request,\n  options?: UseQueueOptionsType,\n): UseQueueReturnType<Request> => {\n  // Build the configuration options\n  const { config: globalConfig } = useProvider();\n  const { dispatcherType, keepFinishedRequests } = {\n    ...useQueueDefaultOptions,\n    ...globalConfig.useQueueConfig,\n    ...options,\n  };\n\n  const { abortKey: rawAbortKey, queryKey: rawQueryKey, scope, client } = request;\n  const abortKey = scopeKey(rawAbortKey, scope);\n  const queryKey = scopeKey(rawQueryKey, scope);\n  const { requestManager } = client;\n\n  const [dispatcher] = getRequestDispatcher(request, dispatcherType);\n\n  const [stopped, setStopped] = useState(false);\n  const [requests, setRequests] = useState<QueueRequest<Request>[]>([]);\n\n  // ******************\n  // Mapping\n  // ******************\n\n  const createRequestsArray = useCallback(\n    (\n      queueElements: ResolvedQueueItemType<Request>[],\n      prevRequests?: QueueRequest<Request>[],\n    ): QueueRequest<Request>[] => {\n      const newRequests = queueElements\n        // Keep only unique requests\n        .filter((el) => !prevRequests?.some((prevEl) => prevEl.requestId === el.requestId))\n        .map<QueueRequest<Request>>((req) => ({\n          failed: false,\n          canceled: false,\n          removed: false,\n          success: false,\n          ...req,\n          downloading: {\n            progress: 0,\n            timeLeft: 0,\n            sizeLeft: 0,\n            total: 0,\n            loaded: 0,\n            startTimestamp: 0,\n          },\n          uploading: {\n            progress: 0,\n            timeLeft: 0,\n            sizeLeft: 0,\n            total: 0,\n            loaded: 0,\n            startTimestamp: 0,\n          },\n          stopRequest: () => dispatcher.stopRequest(queryKey, req.requestId),\n          startRequest: () => dispatcher.startRequest(queryKey, req.requestId),\n          deleteRequest: () => dispatcher.delete(queryKey, req.requestId, abortKey),\n        }));\n\n      if (keepFinishedRequests && prevRequests) {\n        return [...prevRequests, ...newRequests];\n      }\n\n      return newRequests;\n    },\n    [abortKey, dispatcher, queryKey, keepFinishedRequests],\n  );\n\n  const mergePayloadType = useCallback((requestId: string, data: Partial<QueueRequest<Request>>) => {\n    setRequests((prev) =>\n      prev.map((el) => {\n        if (el.requestId === requestId && canUpdate(el)) {\n          return { ...el, ...data };\n        }\n        return el;\n      }),\n    );\n  }, []);\n\n  // ******************\n  // State\n  // ******************\n\n  const getInitialState = () => {\n    const requestQueue = dispatcher.getQueue<Request>(queryKey);\n\n    setStopped(requestQueue.stopped);\n    setRequests(createRequestsArray(requestQueue.requests));\n  };\n\n  const resolveQueueItems = useCallback(\n    (items: QueueItemType<Request>[]): ResolvedQueueItemType<Request>[] => {\n      return items.map((item) => {\n        if (item.request instanceof Request) {\n          return item as ResolvedQueueItemType<Request>;\n        }\n        return { ...item, request: client.fromJSON(item.request) as Request };\n      });\n    },\n    [client],\n  );\n\n  const updateQueueState = useCallback(\n    (values: QueueDataType<Request>) => {\n      setStopped(values.stopped);\n      setRequests((prev) => createRequestsArray(resolveQueueItems(values.requests), prev));\n    },\n    [createRequestsArray, resolveQueueItems],\n  );\n\n  // ******************\n  // Events\n  // ******************\n\n  const mountEvents = () => {\n    const unmountChange = dispatcher.events.onQueueChangeByKey<Request>(queryKey, updateQueueState);\n    const unmountStatus = dispatcher.events.onQueueStatusChangeByKey<Request>(queryKey, updateQueueState);\n\n    const unmountFailed = requestManager.events.onResponse(({ requestId, response }) => {\n      if (!response.success) {\n        setRequests((prev) => prev.map((el) => (el.requestId === requestId ? { ...el, failed: true } : el)));\n      } else {\n        setRequests((prev) => prev.map((el) => (el.requestId === requestId ? { ...el, success: true } : el)));\n      }\n    });\n    const unmountCanceled = requestManager.events.onAbort(({ requestId }) => {\n      setRequests((prev) => prev.map((el) => (el.requestId === requestId ? { ...el, canceled: true } : el)));\n    });\n\n    const unmountRemoved = requestManager.events.onRemove(({ requestId }) => {\n      setRequests((prev) =>\n        prev.map((el) => (el.requestId === requestId && canUpdate(el) ? { ...el, removed: true } : el)),\n      );\n    });\n\n    const unmountDownload = requestManager.events.onDownloadProgress(\n      ({ progress, timeLeft, sizeLeft, total, loaded, startTimestamp, requestId }) => {\n        mergePayloadType(requestId, { downloading: { progress, timeLeft, sizeLeft, total, loaded, startTimestamp } });\n      },\n    );\n\n    const unmountUpload = requestManager.events.onUploadProgress(\n      ({ progress, timeLeft, sizeLeft, total, loaded, startTimestamp, requestId }) => {\n        mergePayloadType(requestId, { uploading: { progress, timeLeft, sizeLeft, total, loaded, startTimestamp } });\n      },\n    );\n\n    const unmount = () => {\n      unmountStatus();\n      unmountChange();\n      unmountDownload();\n      unmountUpload();\n      unmountFailed();\n      unmountCanceled();\n      unmountRemoved();\n    };\n\n    return unmount;\n  };\n\n  // ******************\n  // Lifecycle\n  // ******************\n\n  useEffect(getInitialState, [createRequestsArray, dispatcher, queryKey]);\n\n  useEffect(mountEvents, [\n    stopped,\n    requests,\n    setRequests,\n    setStopped,\n    queryKey,\n    dispatcher.events,\n    requestManager.events,\n    updateQueueState,\n    mergePayloadType,\n  ]);\n\n  return {\n    stopped,\n    requests,\n    dispatcher,\n    stop: () => dispatcher.stop(queryKey),\n    pause: () => dispatcher.pause(queryKey),\n    start: () => dispatcher.start(queryKey),\n  };\n};\n","import type { RequiredKeys } from \"@hyper-fetch/core\";\n\nimport type { UseQueueOptionsType } from \"hooks/use-queue\";\n\nexport const useQueueDefaultOptions: RequiredKeys<UseQueueOptionsType> = {\n  dispatcherType: \"auto\",\n  keepFinishedRequests: false,\n};\n","import { useDidUpdate } from \"@better-hooks/lifecycle\";\nimport type { RequestInstance } from \"@hyper-fetch/core\";\nimport { getRequestDispatcher } from \"@hyper-fetch/core\";\nimport { useRef } from \"react\";\n\nimport type { UseCacheOptionsType, UseCacheReturnType } from \"hooks/use-cache\";\nimport { useCacheDefaultOptions } from \"hooks/use-cache\";\nimport { useRequestEvents, useTrackedState } from \"helpers\";\nimport { useProvider } from \"provider\";\nimport { createTrackedProxy } from \"utils\";\n\nexport const useCache = <T extends RequestInstance>(\n  request: T,\n  options?: UseCacheOptionsType<T>,\n): UseCacheReturnType<T> => {\n  const { cacheKey, client } = request;\n\n  const { cache, loggerManager } = client;\n  const logger = useRef(loggerManager.initialize(client, \"useCache\")).current;\n  const [dispatcher] = getRequestDispatcher(request);\n  const updateKey = JSON.stringify(request.toJSON());\n\n  // Build the configuration options\n  const { config: globalConfig } = useProvider();\n  const { dependencyTracking, initialResponse, deepCompare } = {\n    ...useCacheDefaultOptions,\n    ...globalConfig.useCacheConfig,\n    ...options,\n  };\n\n  /**\n   * State handler with optimization for rerendering, that hooks into the cache state and dispatchers queues\n   */\n  const [state, actions, { setRenderKey, setCacheData, getIsDataProcessing }] = useTrackedState<T>({\n    logger,\n    request,\n    dispatcher,\n    initialResponse,\n    deepCompare,\n    dependencyTracking,\n  });\n\n  /**\n   * Handles the data exchange with the core logic - responses, loading, downloading etc\n   */\n  const [, listeners] = useRequestEvents({\n    logger,\n    actions,\n    request,\n    dispatcher,\n    setCacheData,\n    getIsDataProcessing,\n  });\n\n  const { addCacheDataListener, addLifecycleListeners } = listeners;\n\n  const handleMountEvents = () => {\n    const unmountDataListener = addCacheDataListener(request);\n    const unmountLifecycleListener = addLifecycleListeners(request);\n    return () => {\n      unmountDataListener();\n      unmountLifecycleListener();\n    };\n  };\n\n  useDidUpdate(\n    () => {\n      return handleMountEvents();\n    },\n    [updateKey],\n    true,\n  );\n\n  const invalidate = (cacheKeys?: string | RegExp | RequestInstance | Array<string | RegExp | RequestInstance>) => {\n    cache.invalidate(cacheKeys ?? cacheKey);\n  };\n\n  const trackedKeys = [\n    \"data\",\n    \"error\",\n    \"loading\",\n    \"status\",\n    \"success\",\n    \"extra\",\n    \"retries\",\n    \"responseTimestamp\",\n    \"requestTimestamp\",\n  ] as const;\n\n  return createTrackedProxy(\n    {\n      data: state.data,\n      error: state.error,\n      loading: state.loading,\n      status: state.status,\n      success: state.success,\n      extra: state.extra,\n      retries: state.retries,\n      responseTimestamp: state.responseTimestamp,\n      requestTimestamp: state.requestTimestamp,\n      ...actions,\n      invalidate,\n    },\n    trackedKeys,\n    setRenderKey,\n  ) as UseCacheReturnType<T>;\n};\n","export const useCacheDefaultOptions = {\n  dependencyTracking: true,\n  initialResponse: null,\n  deepCompare: true,\n};\n","import type { RequestInstance, ExtractAdapterExtraType, ExtractAdapterType, ExtractErrorType } from \"@hyper-fetch/core\";\nimport { scopeKey } from \"@hyper-fetch/core\";\nimport { useCallback, useEffect, useRef, useSyncExternalStore } from \"react\";\n\nimport type { UseStreamOptionsType, UseStreamReturnType } from \"./use-stream.types\";\n\ntype StreamState<T extends RequestInstance> = {\n  text: string;\n  chunks: Uint8Array[];\n  streaming: boolean;\n  done: boolean;\n  error: ExtractErrorType<T> | null;\n  extra: ExtractAdapterExtraType<ExtractAdapterType<T>> | null;\n  status: number | null;\n};\n\nconst getInitialState = <T extends RequestInstance>(): StreamState<T> => ({\n  text: \"\",\n  chunks: [],\n  streaming: false,\n  done: false,\n  error: null,\n  extra: null,\n  status: null,\n});\n\n/**\n * Hook for consuming streaming responses chunk-by-chunk.\n * Works with any request that uses the fetch adapter's `streaming: true` option.\n *\n * Provides both accumulated `text` (for LLM/SSE use cases) and raw `chunks`\n * (for binary streaming / file downloads).\n */\nexport const useStream = <T extends RequestInstance>(\n  request: T,\n  options?: UseStreamOptionsType,\n): UseStreamReturnType<T> => {\n  const { autoStart = false } = options || {};\n\n  const state = useRef<StreamState<T>>(getInitialState<T>());\n  const abortRef = useRef<(() => void) | null>(null);\n  const startedRef = useRef(false);\n\n  // useSyncExternalStore for re-renders\n  const versionRef = useRef(0);\n  const listenerRef = useRef<(() => void) | null>(null);\n\n  const subscribe = useCallback((listener: () => void) => {\n    listenerRef.current = listener;\n    return () => {\n      listenerRef.current = null;\n    };\n  }, []);\n\n  const getSnapshot = useCallback(() => versionRef.current, []);\n\n  useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n  const emitChange = () => {\n    versionRef.current += 1;\n    listenerRef.current?.();\n  };\n\n  const consumeStream = async (stream: ReadableStream<Uint8Array>) => {\n    const reader = stream.getReader();\n    const decoder = new TextDecoder();\n\n    try {\n      // eslint-disable-next-line no-constant-condition\n      while (true) {\n        // eslint-disable-next-line no-await-in-loop\n        const { done, value } = await reader.read();\n        if (done) break;\n\n        state.current.chunks = [...state.current.chunks, value];\n        state.current.text += decoder.decode(value, { stream: true });\n        emitChange();\n      }\n\n      state.current.streaming = false;\n      state.current.done = true;\n      emitChange();\n    } catch (err) {\n      state.current.streaming = false;\n      state.current.error = err as ExtractErrorType<T>;\n      emitChange();\n    }\n  };\n\n  const start = useCallback(() => {\n    if (state.current.streaming) return;\n\n    state.current = {\n      ...getInitialState<T>(),\n      streaming: true,\n    };\n    emitChange();\n\n    const streamingRequest = request.setOptions({ streaming: true } as any);\n\n    streamingRequest.send().then((response) => {\n      const { data, error, status, extra } = response;\n\n      state.current.status = status as number | null;\n      state.current.extra = extra as ExtractAdapterExtraType<ExtractAdapterType<T>> | null;\n\n      if (error) {\n        state.current.streaming = false;\n        state.current.error = error;\n        emitChange();\n        return;\n      }\n\n      if (data && typeof (data as any).getReader === \"function\") {\n        consumeStream(data as unknown as ReadableStream<Uint8Array>);\n      } else {\n        state.current.streaming = false;\n        state.current.text = typeof data === \"string\" ? data : JSON.stringify(data);\n        state.current.done = true;\n        emitChange();\n      }\n    });\n\n    abortRef.current = () => {\n      request.client.requestManager.abortByKey(scopeKey(request.abortKey, request.scope));\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [request]);\n\n  const abort = useCallback(() => {\n    abortRef.current?.();\n    state.current.streaming = false;\n    emitChange();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const reset = useCallback(() => {\n    abortRef.current?.();\n    state.current = getInitialState<T>();\n    startedRef.current = false;\n    emitChange();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (autoStart && !startedRef.current) {\n      startedRef.current = true;\n      start();\n    }\n  }, [autoStart, start]);\n\n  return {\n    text: state.current.text,\n    chunks: state.current.chunks,\n    streaming: state.current.streaming,\n    done: state.current.done,\n    error: state.current.error,\n    extra: state.current.extra,\n    status: state.current.status,\n    start,\n    abort,\n    reset,\n  };\n};\n","import { useDidUpdate, useWillUnmount } from \"@better-hooks/lifecycle\";\nimport type { ListenerInstance, ExtractListenerResponseType } from \"@hyper-fetch/sockets\";\nimport { useRef } from \"react\";\n\nimport { useSocketState } from \"helpers\";\nimport type { UseListenerOptionsType } from \"hooks/use-listener\";\nimport { useProvider } from \"provider\";\nimport { createTrackedProxy } from \"utils\";\n\nexport const useListener = <ListenerType extends ListenerInstance>(\n  listener: ListenerType,\n  options?: UseListenerOptionsType,\n) => {\n  const { config: globalConfig } = useProvider();\n  const { dependencyTracking } = { ...globalConfig.useListener, ...options };\n  const [state, actions, callbacks, { setRenderKey }] = useSocketState(listener.socket, { dependencyTracking });\n  const removeListenerRef = useRef<ReturnType<typeof listener.listen> | null>(null);\n\n  /**\n   * Callbacks\n   */\n\n  const onEventCallback = useRef<\n    null | ((response: { data: ExtractListenerResponseType<ListenerType>; extra: Record<string, any> }) => void)\n  >(null);\n\n  /**\n   * Actions\n   */\n\n  const stopListener = () => {\n    removeListenerRef.current?.();\n  };\n\n  const listen = () => {\n    stopListener();\n    removeListenerRef.current = listener.listen(({ data, extra }) => {\n      onEventCallback.current?.({ data, extra });\n      actions.setData(data);\n      actions.setExtra(extra);\n      actions.setTimestamp(+new Date());\n    });\n  };\n\n  const additionalCallbacks = {\n    onEvent: (callback: NonNullable<typeof onEventCallback.current>) => {\n      onEventCallback.current = callback;\n    },\n  };\n\n  /**\n   * Lifecycle\n   */\n\n  useDidUpdate(\n    () => {\n      listen();\n    },\n    [listener.params, JSON.stringify(listener.options)],\n    true,\n  );\n\n  useWillUnmount(() => {\n    stopListener();\n  });\n\n  const trackedKeys = [\"data\", \"extra\", \"connected\", \"connecting\", \"timestamp\"] as const;\n\n  return createTrackedProxy(\n    {\n      data: state.data,\n      extra: state.extra,\n      connected: state.connected,\n      connecting: state.connecting,\n      timestamp: state.timestamp,\n      ...actions,\n      ...callbacks,\n      ...additionalCallbacks,\n      listen,\n    },\n    trackedKeys,\n    setRenderKey,\n  );\n};\n","import type { EmitterInstance, EmitterCallbackErrorType, EmitType } from \"@hyper-fetch/sockets\";\nimport { useDidUpdate } from \"@better-hooks/lifecycle\";\nimport { useRef } from \"react\";\n\nimport type { UseEmitterOptionsType } from \"hooks/use-emitter\";\nimport { useSocketState } from \"helpers\";\nimport { useProvider } from \"provider\";\nimport { createTrackedProxy } from \"utils\";\n\nexport const useEmitter = <EmitterType extends EmitterInstance>(\n  emitter: EmitterType,\n  options?: UseEmitterOptionsType,\n) => {\n  const { config: globalConfig } = useProvider();\n  const { dependencyTracking } = { ...globalConfig.useEmitter, ...options };\n\n  const [state, actions, callbacks, { setRenderKey }] = useSocketState(emitter.socket, { dependencyTracking });\n\n  /**\n   * Callbacks\n   */\n  const onEventStartCallback = useRef<null | ((emitter: EmitterType) => void)>(null);\n  const onEventErrorCallback = useRef<null | EmitterCallbackErrorType>(null);\n\n  useDidUpdate(\n    () => {\n      const onEventStart = () => {\n        return emitter.socket.events.onEmitterStartEventByTopic(emitter, () => {\n          onEventStartCallback.current?.(emitter);\n        });\n      };\n\n      const onEventError = () => {\n        return emitter.socket.events.onEmitterErrorByTopic(emitter, ({ error }) => {\n          onEventErrorCallback.current?.({ error });\n        });\n      };\n\n      const unmountEventStart = onEventStart();\n      const unmountEventError = onEventError();\n\n      return () => {\n        unmountEventStart();\n        unmountEventError();\n      };\n    },\n    [emitter.topic, onEventStartCallback.current, onEventErrorCallback.current],\n    true,\n  );\n\n  /**\n   * Emitter\n   */\n\n  const emit: EmitType<EmitterType> = (emitOptions: Parameters<EmitType<EmitterType>>[0]) => {\n    return emitter.emit(emitOptions as any);\n  };\n\n  const onEmit = (callback: (emitter: EmitterType) => void) => {\n    onEventStartCallback.current = callback;\n  };\n\n  const onEmitError = (callback: EmitterCallbackErrorType) => {\n    onEventErrorCallback.current = callback;\n  };\n\n  const trackedKeys = [\"connected\", \"connecting\"] as const;\n\n  return createTrackedProxy(\n    {\n      connected: state.connected,\n      connecting: state.connecting,\n      ...actions,\n      ...callbacks,\n      onEmit,\n      onEmitError,\n      emit,\n    },\n    trackedKeys,\n    setRenderKey,\n  );\n};\n","import { useDidMount } from \"@better-hooks/lifecycle\";\nimport type { ClientInstance } from \"@hyper-fetch/core\";\nimport { useState } from \"react\";\n\nimport type { UseAppManagerReturnType } from \"hooks/use-app-manager\";\n\nexport const useAppManager = <Client extends ClientInstance>(client: Client): UseAppManagerReturnType => {\n  const [online, setIsOnline] = useState(client.appManager.isOnline);\n  const [focused, setIsFocused] = useState(client.appManager.isFocused);\n\n  const mountEvents = () => {\n    const unmountIsOnline = client.appManager.events.onOnline(() => setIsOnline(true));\n    const unmountIsOffline = client.appManager.events.onOffline(() => setIsOnline(false));\n    const unmountIsFocus = client.appManager.events.onFocus(() => setIsFocused(true));\n    const unmountIsBlur = client.appManager.events.onBlur(() => setIsFocused(false));\n\n    return () => {\n      unmountIsOnline();\n      unmountIsOffline();\n      unmountIsFocus();\n      unmountIsBlur();\n    };\n  };\n\n  const setOnline = (isOnline: boolean) => {\n    client.appManager.setOnline(isOnline);\n  };\n\n  const setFocused = (isFocused: boolean) => {\n    client.appManager.setFocused(isFocused);\n  };\n\n  useDidMount(mountEvents);\n\n  return { isOnline: online, isFocused: focused, setOnline, setFocused };\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}