{"version":3,"sources":["../src/errors.ts","../src/utils.ts","../src/fuuu.ts"],"sourcesContent":["export class TimeoutError extends Error {\n  constructor(ms: number) {\n    super(`The operation exceeded the time limit of ${ms}ms and was aborted.`)\n    this.name = \"TimeoutError\"\n  }\n}\n","export const sleep = (ms: number) =>\n  new Promise((resolve) => setTimeout(resolve, ms))\n","import { TimeoutError } from \"./errors\"\nimport {\n  SafeFunctionOption,\n  SafeFunctionPayload,\n  SafeFunctionResult,\n  SafeSyncFunctionPayload,\n  SafeSyncFunctionResult,\n} from \"./types\"\nimport { sleep } from \"./utils\"\n\nexport const safe = async <T, E extends Error = Error>(\n  fn: SafeFunctionPayload<T>,\n  options?: SafeFunctionOption,\n): SafeFunctionResult<T, E> =>\n  new Promise(async (resolve) => {\n    const defaultOptions = {\n      ...options,\n      retries: options?.retries ?? 1,\n      retryDelay: options?.retryDelay ?? 0,\n    }\n\n    const retriesAsArray = Array.from({ length: defaultOptions.retries })\n\n    if (defaultOptions.timeout)\n      sleep(defaultOptions.timeout).then(() => {\n        return resolve({\n          data: null,\n          error: new TimeoutError(defaultOptions.timeout!) as E,\n        })\n      })\n\n    let error: Error | null = null\n\n    for await (const _retry of retriesAsArray) {\n      try {\n        const data = await fn()\n        return resolve({ data, error: null })\n      } catch (throwable: any) {\n        error = throwable as E\n        await sleep(defaultOptions.retryDelay)\n      }\n    }\n\n    return resolve({\n      error: error as E,\n      data: null,\n    })\n  })\n\nexport const syncSafe = <T, E extends Error = Error>(\n  fn: SafeSyncFunctionPayload<T>,\n): SafeSyncFunctionResult<T, E> => {\n  try {\n    const data = fn()\n    return { data, error: null }\n  } catch (throwable: any) {\n    return { error: throwable, data: null }\n  }\n}\n"],"mappings":";AAAO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YAAY,IAAY;AACtB,UAAM,4CAA4C,uBAAuB;AACzE,SAAK,OAAO;AAAA,EACd;AACF;;;ACLO,IAAM,QAAQ,CAAC,OACpB,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;;;ACS3C,IAAM,OAAO,OAClB,IACA,YAEA,IAAI,QAAQ,OAAO,YAAY;AAC7B,QAAM,iBAAiB;AAAA,IACrB,GAAG;AAAA,IACH,SAAS,SAAS,WAAW;AAAA,IAC7B,YAAY,SAAS,cAAc;AAAA,EACrC;AAEA,QAAM,iBAAiB,MAAM,KAAK,EAAE,QAAQ,eAAe,QAAQ,CAAC;AAEpE,MAAI,eAAe;AACjB,UAAM,eAAe,OAAO,EAAE,KAAK,MAAM;AACvC,aAAO,QAAQ;AAAA,QACb,MAAM;AAAA,QACN,OAAO,IAAI,aAAa,eAAe,OAAQ;AAAA,MACjD,CAAC;AAAA,IACH,CAAC;AAEH,MAAI,QAAsB;AAE1B,mBAAiB,UAAU,gBAAgB;AACzC,QAAI;AACF,YAAM,OAAO,MAAM,GAAG;AACtB,aAAO,QAAQ,EAAE,MAAM,OAAO,KAAK,CAAC;AAAA,IACtC,SAAS,WAAP;AACA,cAAQ;AACR,YAAM,MAAM,eAAe,UAAU;AAAA,IACvC;AAAA,EACF;AAEA,SAAO,QAAQ;AAAA,IACb;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AACH,CAAC;AAEI,IAAM,WAAW,CACtB,OACiC;AACjC,MAAI;AACF,UAAM,OAAO,GAAG;AAChB,WAAO,EAAE,MAAM,OAAO,KAAK;AAAA,EAC7B,SAAS,WAAP;AACA,WAAO,EAAE,OAAO,WAAW,MAAM,KAAK;AAAA,EACxC;AACF;","names":[]}