{"version":3,"sources":["../src/func/safeCall.ts"],"names":["safeCall","fn","args","options","finalArgs","finalOptions","catcher","assignObject","r","resolve","reject","v","e","error"],"mappings":";;;;AA2BO,SAASA,CAASC,CAAAA,CAAAA,CAAYC,CAAgDC,CAAAA,CAAAA,CAA+C,CAChI,IAAIC,CAAAA,CAAkB,EAAC,CACnBC,CAAgC,CAAA,EAChCC,CAAAA,CAAAA,CACD,UAAU,MAAQ,EAAA,CAAA,CACd,SAAU,CAAA,CAAC,CAAa,WAAA,KAAA,CACvBF,CAAY,CAAA,SAAA,CAAU,CAAC,CAEvBC,CAAAA,CAAAA,CAAe,SAAU,CAAA,CAAC,CAEzB,CAAA,SAAA,CAAU,MAAQ,EAAA,CAAA,GACvBD,EAAY,SAAU,CAAA,CAAC,CAAK,EAAA,EAC5BC,CAAAA,CAAAA,CAAe,SAAU,CAAA,CAAC,GAAK,EAAC,CAAA,CAEjC,OAAOA,CAAAA,EAAe,UACrBC,CAAAA,CAAAA,CAAUD,CAEVA,CAAAA,CAAAA,CAAeE,EAAa,CACxB,KAAA,CAAM,QACN,CAAA,OAAA,CAAQ,MACZ,CAAA,CAAEF,CAAY,CAAA,CAElB,GAAG,CACC,IAAMG,CAAIP,CAAAA,CAAAA,CAAG,GAAGG,CAAS,CAAA,CACzB,OAAGI,CAAAA,YAAa,QACL,IAAI,OAAA,CAAa,CAACC,CAAAA,CAAQC,CAAS,GAAA,CACtCF,CAAE,CAAA,IAAA,CAAMG,GAAI,CACRF,CAAAA,CAAQE,CAAC,EACb,CAAC,CAAA,CAAE,KAAOC,CAAAA,CAAAA,EAAQ,CACd,GAAG,OAAON,CAAU,EAAA,UAAA,CAChB,OAAOG,CAAAA,CAAQH,CAAQM,CAAAA,CAAC,CAAC,CAE1BP,CAAAA,CAAAA,CAAa,KAAO,EAAA,QAAA,CACnBI,EAAQJ,CAAa,CAAA,OAAO,CACtBA,CAAAA,CAAAA,CAAa,OAAO,OAC1BK,EAAAA,CAAAA,CAAOL,CAAa,CAAA,KAAA,EAASO,CAAC,EAEtC,CAAC,EACL,CAAC,CAEMJ,CAAAA,CAEf,CAAOK,MAAAA,CAAAA,CAAU,CACb,GAAG,OAAOP,CAAAA,EAAU,WAChB,OAAOA,CAAAA,CAAQO,CAAK,CAAA,CAExB,GAAGR,CAAAA,CAAa,KAAO,EAAA,QAAA,CACnB,OAAOA,CAAa,CAAA,OAAA,CAClB,GAAIA,CAAAA,CAAa,OAAO,OAC1B,CAAA,MAAMA,CAAa,CAAA,KAAA,EAASQ,CAEpC,CACJ","file":"chunk-WHYFX6HP.mjs","sourcesContent":["import { assignObject } from '../object/assignObject';\n/**\n * \n *   执行一个函数，并在出错时对错误进行捕获处理\n * \n * \n *   safeCall(fn,args)           // 出错时忽略并返回 undefined\n *   safeCall(fn,args,{catch:'ignore'})\n *   safeCall(fn,args,{catch:'ignore',default:0})\n *   safeCall(fn,args,{catch:'throw'})   // 出错时原样抛出错误\n *   safeCall(fn,args,(error)=>{})       // 调用函数并返回值\n *   \n */\n\n\nexport interface SafeCallOptions{\n    // 出错时的处理方式:\n    // ignore: 忽略错误，返回默认值\n    // throw: 抛出错误\n    catch?:'ignore'|'throw' \n    default?:any             // 出错时的默认返回值\n    error?:Error             // 出错时并且catch为throw时，抛出的错误\n}\nexport type SafeCallCatcher = (error:Error)=>any\n\nexport function safeCall(fn:Function,args?:any[]):any;\nexport function safeCall(fn:Function,options?:SafeCallOptions | SafeCallCatcher):any;\nexport function safeCall(fn:Function,args?:any[] | SafeCallOptions | SafeCallCatcher,options?:SafeCallOptions | SafeCallCatcher):any{\n    let finalArgs:any[] = []\n    let finalOptions:SafeCallOptions  = {}\n    let catcher:SafeCallCatcher | undefined\n    if(arguments.length==2){\n        if(arguments[1] instanceof Array){\n            finalArgs = arguments[1]\n        }else{\n            finalOptions = arguments[1] as SafeCallOptions \n        }\n    }else if(arguments.length==3){\n        finalArgs = arguments[1] || []\n        finalOptions = arguments[2] || {}\n    }\n    if(typeof(finalOptions)=='function'){\n        catcher = finalOptions\n    }else{\n        finalOptions = assignObject({\n            catch:'ignore',\n            default:undefined\n        },finalOptions)\n    } \n    try{\n        const r = fn(...finalArgs)\n        if(r instanceof Promise){            \n            return new Promise<any>((resolve,reject)=>{\n                r.then((v)=>{\n                    resolve(v)\n                }).catch((e:any)=>{\n                    if(typeof(catcher)=='function'){\n                        return resolve(catcher(e))\n                    }\n                    if(finalOptions.catch=='ignore'){\n                        resolve(finalOptions.default)\n                    }else if (finalOptions.catch=='throw'){\n                        reject(finalOptions.error || e)\n                    }\n                })\n            })\n        }else{\n            return r\n        }\n    }catch(error:any){\n        if(typeof(catcher)=='function'){\n            return catcher(error)\n        }\n        if(finalOptions.catch=='ignore'){\n            return finalOptions.default\n        }else if (finalOptions.catch=='throw'){\n            throw finalOptions.error || error\n        }\n    }\n}"]}