{"version":3,"sources":["../../../src/utils/create-effect/async.ts"],"sourcesContent":["import { useLatest } from '../../use-latest'\n\nimport type { DependencyList } from 'react'\nimport type { ExtendedReactEffect } from '../basic'\n\n/**\n * A callback function for async effect\n *\n * @param {() => boolean} isCancelled - `() => boolean`, a function to check if the effect is cancelled\n * @returns {void} `void`\n */\nexport type AsyncEffectCallback = (isCancelled: () => boolean) => void\n\nexport type UseAsyncEffect<T = unknown> = (callback: AsyncEffectCallback, deps?: DependencyList, ...args: T[]) => void\n\nexport function createAsyncEffect<T = unknown>(effect: ExtendedReactEffect<T>): UseAsyncEffect<T> {\n  return (callback: AsyncEffectCallback, deps?: DependencyList, ...args: T[]): void => {\n    const latest = useLatest({ callback })\n\n    effect(\n      () => {\n        let cancelled = false\n        const isCancelled = () => cancelled\n        latest.current.callback(isCancelled)\n        return () => {\n          cancelled = true\n        }\n      },\n      deps,\n      ...args,\n    )\n  }\n}\n"],"names":["createAsyncEffect","effect","callback","deps","args","latest","useLatest","cancelled","isCancelled","current"],"mappings":";;;;+BAegBA;;;eAAAA;;;yBAfU;;;;;;;;;;;;;;;;;;;;;;;;;;AAenB,SAASA,kBAA+BC,MAA8B;IAC3E,OAAO,SAACC,UAA+BC;yCAA0BC;YAAAA;;QAC/D,IAAMC,SAASC,IAAAA,oBAAS,EAAC;YAAEJ,UAAAA;QAAS;QAEpCD,aAAAA,KAAAA,GAAAA;YACE;gBACE,IAAIM,YAAY;gBAChB,IAAMC,cAAc;2BAAMD;;gBAC1BF,OAAOI,OAAO,CAACP,QAAQ,CAACM;gBACxB,OAAO;oBACLD,YAAY;gBACd;YACF;YACAJ;SAED,CAXDF,OAUE,qBAAGG;IAEP;AACF"}