{"version":3,"file":"parse-error.cjs","names":[],"sources":["../src/parse-error.ts"],"sourcesContent":["import type { StructuredError } from './structured-error';\n\nexport interface ParsedError {\n  message: string;\n  status: number;\n  why?: string;\n  fix?: string;\n  link?: string;\n  code?: string | number;\n  details?: Record<string, unknown>;\n  raw: unknown;\n}\n\ntype ErrorLike = {\n  message?: unknown;\n  status?: unknown;\n  statusCode?: unknown;\n  data?: unknown;\n  code?: unknown;\n  why?: unknown;\n  fix?: unknown;\n  link?: unknown;\n  details?: unknown;\n};\n\nfunction toStatus(value: unknown): number | undefined {\n  if (typeof value === 'number' && Number.isFinite(value)) return value;\n  if (typeof value === 'string') {\n    const n = Number(value);\n    if (Number.isFinite(n)) return n;\n  }\n  return undefined;\n}\n\nfunction pickString(value: unknown): string | undefined {\n  return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction pickCode(value: unknown): string | number | undefined {\n  if (typeof value === 'string' || typeof value === 'number') return value;\n  return undefined;\n}\n\nfunction pickDetails(value: unknown): Record<string, unknown> | undefined {\n  if (value && typeof value === 'object' && value.constructor === Object) {\n    return value as Record<string, unknown>;\n  }\n  return undefined;\n}\n\nexport function parseError(error: unknown): ParsedError {\n  if (error instanceof Error) {\n    const structured = error as StructuredError;\n    return {\n      message: error.message || 'An error occurred',\n      status: toStatus(structured.status) ?? 500,\n      why: pickString(structured.why),\n      fix: pickString(structured.fix),\n      link: pickString(structured.link),\n      code: pickCode(structured.code),\n      details: pickDetails(structured.details),\n      raw: error,\n    };\n  }\n\n  if (error && typeof error === 'object') {\n    const err = error as ErrorLike;\n    const data =\n      err.data && typeof err.data === 'object'\n        ? (err.data as Record<string, unknown>)\n        : undefined;\n    const nested =\n      data?.data && typeof data.data === 'object'\n        ? (data.data as Record<string, unknown>)\n        : undefined;\n    const payload = nested ?? data;\n\n    const message =\n      pickString(data?.statusText) ||\n      pickString(data?.statusMessage) ||\n      pickString(data?.message) ||\n      pickString(payload?.statusText) ||\n      pickString(payload?.statusMessage) ||\n      pickString(payload?.message) ||\n      pickString(err.message) ||\n      'An error occurred';\n\n    const status =\n      toStatus(payload?.status) ||\n      toStatus(payload?.statusCode) ||\n      toStatus(err.status) ||\n      toStatus(err.statusCode) ||\n      500;\n\n    return {\n      message,\n      status,\n      why: pickString(payload?.why) || pickString(err.why),\n      fix: pickString(payload?.fix) || pickString(err.fix),\n      link: pickString(payload?.link) || pickString(err.link),\n      code: pickCode(payload?.code) || pickCode(err.code),\n      details: pickDetails(payload?.details) || pickDetails(err.details),\n      raw: error,\n    };\n  }\n\n  return {\n    message: String(error),\n    status: 500,\n    raw: error,\n  };\n}\n"],"mappings":";;;AAyBA,SAAS,SAAS,OAAoC;CACpD,IAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GAAG,OAAO;CAChE,IAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,IAAI,OAAO,KAAK;EACtB,IAAI,OAAO,SAAS,CAAC,GAAG,OAAO;CACjC;AAEF;AAEA,SAAS,WAAW,OAAoC;CACtD,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAEA,SAAS,SAAS,OAA6C;CAC7D,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU,OAAO;AAErE;AAEA,SAAS,YAAY,OAAqD;CACxE,IAAI,SAAS,OAAO,UAAU,YAAY,MAAM,gBAAgB,QAC9D,OAAO;AAGX;AAEA,SAAgB,WAAW,OAA6B;CACtD,IAAI,iBAAiB,OAAO;EAC1B,MAAM,aAAa;EACnB,OAAO;GACL,SAAS,MAAM,WAAW;GAC1B,QAAQ,SAAS,WAAW,MAAM,KAAK;GACvC,KAAK,WAAW,WAAW,GAAG;GAC9B,KAAK,WAAW,WAAW,GAAG;GAC9B,MAAM,WAAW,WAAW,IAAI;GAChC,MAAM,SAAS,WAAW,IAAI;GAC9B,SAAS,YAAY,WAAW,OAAO;GACvC,KAAK;EACP;CACF;CAEA,IAAI,SAAS,OAAO,UAAU,UAAU;EACtC,MAAM,MAAM;EACZ,MAAM,OACJ,IAAI,QAAQ,OAAO,IAAI,SAAS,WAC3B,IAAI,OACL;EAKN,MAAM,WAHJ,MAAM,QAAQ,OAAO,KAAK,SAAS,WAC9B,KAAK,OACN,WACoB;EAmB1B,OAAO;GACL,SAjBA,WAAW,MAAM,UAAU,KAC3B,WAAW,MAAM,aAAa,KAC9B,WAAW,MAAM,OAAO,KACxB,WAAW,SAAS,UAAU,KAC9B,WAAW,SAAS,aAAa,KACjC,WAAW,SAAS,OAAO,KAC3B,WAAW,IAAI,OAAO,KACtB;GAWA,QARA,SAAS,SAAS,MAAM,KACxB,SAAS,SAAS,UAAU,KAC5B,SAAS,IAAI,MAAM,KACnB,SAAS,IAAI,UAAU,KACvB;GAKA,KAAK,WAAW,SAAS,GAAG,KAAK,WAAW,IAAI,GAAG;GACnD,KAAK,WAAW,SAAS,GAAG,KAAK,WAAW,IAAI,GAAG;GACnD,MAAM,WAAW,SAAS,IAAI,KAAK,WAAW,IAAI,IAAI;GACtD,MAAM,SAAS,SAAS,IAAI,KAAK,SAAS,IAAI,IAAI;GAClD,SAAS,YAAY,SAAS,OAAO,KAAK,YAAY,IAAI,OAAO;GACjE,KAAK;EACP;CACF;CAEA,OAAO;EACL,SAAS,OAAO,KAAK;EACrB,QAAQ;EACR,KAAK;CACP;AACF"}