{"version":3,"sources":["../src/func/reliable.ts"],"names":["reliable","fn","options","opts","wrappedFn","applyParams","noReentry","timeout","retry","memorize"],"mappings":";;;;AAqBO,SAASA,CAAAA,CAASC,CAAiBC,CAAAA,GAAAA,CAAsC,CAC5E,IAAIC,EAAO,MAAO,CAAA,MAAA,CAAO,CACrB,OAAA,CAAkB,CAClB,CAAA,UAAA,CAAkB,EAClB,aAAkB,CAAA,GAAA,CAClB,QAAkB,CAAA,CAAA,CAClB,QAAkB,CAAA,CAAA,CAClB,UAAkB,KAClB,CAAA,QAAA,CAAkB,KACtB,CAAA,CAAED,GAAO,CAAA,CAET,GAAGC,CAAK,CAAA,OAAA,GAAU,CAAKA,EAAAA,CAAAA,CAAK,UAAa,GAAA,CAAA,EAAKA,EAAK,QAAW,GAAA,CAAA,EAAKA,CAAK,CAAA,QAAA,GAAW,CAAKA,EAAAA,CAAAA,CAAK,WAAW,KAAO,CAAA,OAAOF,CAEtH,CAAA,IAAIG,CAAYC,CAAAA,CAAAA,CAAYJ,EAAG,GAAG,CAAC,GAAG,SAAS,CAAE,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAEzD,OAAGE,CAAAA,CAAK,SACJC,GAAAA,CAAAA,CAAYE,IAAUF,CAAS,CAAA,CAAA,CAGhCD,CAAK,CAAA,OAAA,CAAU,CACdC,GAAAA,CAAAA,CAAYG,EAAQH,CAAU,CAAA,CAAC,KAAMD,CAAAA,CAAAA,CAAK,OAAO,CAAC,GAGnDA,CAAK,CAAA,UAAA,CAAa,CAAKA,EAAAA,CAAAA,CAAK,aAAiB,EAAA,CAAA,GAC5CC,EAAYI,GAAMJ,CAAAA,CAAAA,CAAU,CAAC,KAAA,CAAOD,CAAK,CAAA,UAAA,CAAY,SAASA,CAAK,CAAA,aAAa,CAAE,CAAA,CAAA,CAEnFA,CAAK,CAAA,QAAA,GAAW,QAAaA,CAAK,CAAA,QAAA,GAAW,KAC5CC,GAAAA,CAAAA,CAAYK,GAASR,CAAAA,CAAAA,CAAI,CAAC,IAAA,CAAKE,CAAK,CAAA,QAAQ,CAAC,CAAA,CAAA,CAG1CC,CACX","file":"chunk-MQ4JJTBW.mjs","sourcesContent":["import {noReentry} from \"./noReentry\"\nimport {timeout} from \"./timeout\"\nimport {retry} from \"./retry\"\nimport {memorize} from './memorize';\nimport type { AsyncFunction } from \"../types\"\nimport { applyParams } from \"./applyParams\";\n\n/**\n *\n * 包装函数，使具备重试、超时特性\n *\n */\n\nexport type reliableOptions={\n    timeout         : number,                            // 执行失败超时,默认为1分钟\n    retryCount      : number,                            // 重试次数\n    retryInterval   : number,                            // 重试间隔\n    noReentry       : boolean,                           // 不可重入\n    memorize        :  ((args: any[]) => string) | 'length' | boolean\n}\n\nexport function reliable(fn:AsyncFunction,options:reliableOptions):AsyncFunction{\n    let opts = Object.assign({\n        timeout         : 0,                            // 执行失败超时,默认为1秒\n        retryCount      : 0,                            // 重试次数\n        retryInterval   : 1000,                         // 重试间隔\n        debounce        : 0,                            // 去抖动\n        throttle        : 0,                            // 节流\n        noReentry       : false,                        // 不可重入\n        memorize        : false\n    },options)\n    \n    if(opts.timeout===0 && opts.retryCount===0 && opts.debounce===0 && opts.throttle===0 && opts.noReentry==false) return fn\n    //\n    let wrappedFn = applyParams(fn,...[...arguments].slice(2)) as AsyncFunction\n    // 不可重入 \n    if(opts.noReentry){\n        wrappedFn = noReentry(wrappedFn)\n    }    \n    // 启用超时功能\n    if(opts.timeout > 0){\n        wrappedFn = timeout(wrappedFn,{value:opts.timeout})\n    }\n    // 启用重试功能\n    if(opts.retryCount > 0 && opts.retryInterval >= 0 ){\n        wrappedFn = retry(wrappedFn,{count: opts.retryCount, interval:opts.retryInterval},)\n    }\n    if(opts.memorize!==undefined && opts.memorize!==false) {\n        wrappedFn = memorize(fn, {hash:opts.memorize}) as AsyncFunction\n    }\n\n    return wrappedFn\n}\n"]}