{"version":3,"sources":["../../src/util.ts","../../src/func.ts"],"names":[],"mappings":";;;;;;AAMO,SAAS,WAAW,GAAqB,EAAA;AAC9C,EAAA,IAAI,eAAe,KAAO,EAAA;AACxB,IAAO,OAAA,GAAA;AAAA;AAET,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAO,OAAA,IAAI,MAAM,GAAG,CAAA;AAAA;AAGtB,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAA,OAAO,IAAI,KAAA,CAAM,IAAK,CAAA,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA;AAEtC,EAAA,OAAO,IAAI,KAAA,CAAM,MAAO,CAAA,GAAG,CAAC,CAAA;AAC9B;AAZgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;;;ACIT,SAAS,GAAM,KAAuB,EAAA;AAC3C,EAAO,OAAA,CAAC,MAAM,KAAK,CAAA;AACrB;AAFgB,MAAA,CAAA,EAAA,EAAA,IAAA,CAAA;AAWT,SAAS,MAAuB,GAAsB,EAAA;AAC3D,EAAO,OAAA,CAAC,KAAK,IAAI,CAAA;AACnB;AAFgB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AAWhB,eAAsB,UAAa,EAAuE,EAAA;AACxG,EAAI,IAAA;AACF,IAAM,MAAA,MAAA,GAAS,MAAM,EAAG,EAAA;AACxB,IAAA,OAAO,GAAG,MAAM,CAAA;AAAA,WAEX,CAAG,EAAA;AACR,IAAO,OAAA,KAAA,CAAM,UAAW,CAAA,CAAC,CAAC,CAAA;AAAA;AAE9B;AARsB,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAqBf,SAAS,YAKX,OAIiD,EAAA;AACpD,EAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,IAAM,MAAA,CAAC,GAAG,CAAI,GAAA,MAAA;AACd,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,OAAO,MAAM,GAAG,CAAA;AAAA;AAClB;AAIF,EAAA,MAAM,CAAC,OAAS,EAAA,SAAS,IAAI,OAAQ,CAAA,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEvD,EAAA,IAAI,YAAY,IAAM,EAAA;AACpB,IAAA,OAAO,MAAM,OAAO,CAAA;AAAA;AAGtB,EAAA,OAAO,GAAG,SAAyB,CAAA;AACrC;AAzBgB,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA","file":"index.cjs","sourcesContent":["/**\n * Converts any value to an Error object.\n *\n * @param obj - The value to be converted.\n * @returns The converted Error object.\n */\nexport function anyToError(obj: unknown): Error {\n  if (obj instanceof Error) {\n    return obj;\n  }\n  if (typeof obj === \"string\") {\n    return new Error(obj);\n  }\n\n  if (typeof obj === \"object\") {\n    return new Error(JSON.stringify(obj));\n  }\n  return new Error(String(obj));\n}\n","import type { Result, ResultErr, ResultOk } from \"./type\";\nimport { anyToError } from \"./util\";\n\n/**\n * Wraps a value in a Result with a success status.\n *\n * @param value - The value to be wrapped.\n * @returns The Result object with success status and wrapped value.\n * @template T - The type of value to be wrapped.\n */\nexport function ok<T>(value: T): ResultOk<T> {\n  return [null, value];\n}\n\n/**\n * Creates an error result.\n *\n * @param err - The error value.\n * @returns The error result.\n * @template E - The type of the error.\n */\nexport function error<E extends Error>(err: E): ResultErr<E> {\n  return [err, null];\n}\n\n/**\n * Executes a given function and returns a Result wrapping the result or an error.\n *\n * @param fn - The function to be executed.\n * @returns A promise that resolves to a Result.\n * @template T - The type of the result value.\n */\nexport async function forceSafe<T>(fn: (...args: unknown[]) => T | Promise<T>): Promise<Result<T, Error>> {\n  try {\n    const result = await fn();\n    return ok(result);\n  }\n  catch (e) {\n    return error(anyToError(e));\n  }\n}\n\n/**\n * A function that handles multiple `Result` values of different types.\n * If all results are successful, returns the success value of the last result.\n * If any result is an error, the first encountered error is returned.\n *\n * @param results - A list of `Result`s which can have different types for success and errors.\n * @returns A `Result` containing the last success or the first error.\n *\n * The success result type is inferred as the success type of the last argument.\n * The error result type is unified across all arguments.\n */\nexport function multiple<\n  TLastSuccess,\n  TLastError extends Error,\n  TErrors extends Error[], // Tuple of all possible error types\n>(\n  ...results: [\n    ...{ [K in keyof TErrors]: Result<unknown, TErrors[K]> },\n    Result<TLastSuccess, TLastError>,\n  ]\n): Result<TLastSuccess, TErrors[number] | TLastError> {\n  for (const result of results) {\n    const [err] = result;\n    if (err !== null) {\n      return error(err);\n    }\n  }\n\n  // If no errors, return last successful value\n  const [lastErr, lastValue] = results[results.length - 1];\n\n  if (lastErr !== null) {\n    return error(lastErr);\n  }\n\n  return ok(lastValue as TLastSuccess);\n}\n"]}