UNPKG

@hazae41/glacier

Version:

Yet another React data (re)fetching library

1 lines 2.74 kB
{"version":3,"file":"use-retry.cjs","sources":["../../../../../../../src/mods/react/hooks/blocks/use-retry.ts"],"sourcesContent":["import { ReactQuery } from \"mods/react/types/query.js\"\nimport { useEffect, useMemo, useRef } from \"react\"\n\nexport interface RetrySettings {\n readonly init?: number\n readonly base?: number\n readonly max?: number\n}\n\n/**\n * Retry request on error using exponential backoff\n * @see useInterval for interval based requests\n * @param query \n * @param settings\n * @param options.init Initial timeout to be multiplied (in milliseconds)\n * @param options.base Exponent base (2 means the next timeout will be 2 times longer)\n * @param options.max Maximum count (3 means do not retry after 3 retries)\n * @see https://en.wikipedia.org/wiki/Exponential_backoff\n * @see https://en.wikipedia.org/wiki/Geometric_progression\n */\nexport function useRetry<K, D, F>(query: ReactQuery<K, D, F>, settings: RetrySettings = {}) {\n const { fetcher, ready, cacheKey, fetchOrThrow: fetch, error } = query\n const { init = 1000, base = 2, max = 3 } = settings\n\n const count = useRef(0)\n\n useMemo(() => {\n count.current = 0\n }, [cacheKey])\n\n useEffect(() => {\n if (!ready)\n return\n if (fetcher == null)\n return\n\n if (error == null) {\n count.current = 0\n return\n }\n\n if (count.current >= max)\n return\n\n const ratio = base ** count.current\n\n function f() {\n count.current++\n // TODO use suspend or wait cooldown\n fetch().catch(console.warn)\n }\n\n const t = setTimeout(f, init * ratio)\n return () => clearTimeout(t)\n }, [ready, error, fetch])\n}"],"names":["useRef","useMemo","useEffect"],"mappings":";;;;AASA;;;;;;;;;;AAUG;SACa,QAAQ,CAAU,KAA0B,EAAE,WAA0B,EAAE,EAAA;AACxF,IAAA,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;AACtE,IAAA,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAA;AAEnD,IAAA,MAAM,KAAK,GAAGA,YAAM,CAAC,CAAC,CAAC,CAAA;IAEvBC,aAAO,CAAC,MAAK;AACX,QAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA;AACnB,KAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEdC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,KAAK;YACR,OAAM;QACR,IAAI,OAAO,IAAI,IAAI;YACjB,OAAM;AAER,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA;YACjB,OAAM;SACP;AAED,QAAA,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG;YACtB,OAAM;AAER,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,CAAA;AAEnC,QAAA,SAAS,CAAC,GAAA;YACR,KAAK,CAAC,OAAO,EAAE,CAAA;;YAEf,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;SAC5B;QAED,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAA;AACrC,QAAA,OAAO,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;KAC7B,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;AAC3B;;;;"}