{"version":3,"sources":["../../src/hono/handler.ts"],"sourcesContent":["import type { Context } from 'hono';\nimport type { RequestIdVariables } from 'hono/request-id';\nimport type { Bindings, HTTPResponseError } from 'hono/types';\nimport type { ContentfulStatusCode } from 'hono/utils/http-status';\nimport { DetailType, Details } from '../error/detail';\nimport { Status, StatusError } from '../error/status';\n\nexport type Env = {\n  Variables: RequestIdVariables;\n  Bindings?: Bindings;\n};\n\ntype AxiosError = {\n  code?: string;\n  cause?: unknown;\n  status?: number;\n  message?: string;\n  isAxiosError: boolean;\n  response?: {\n    data: unknown;\n    status: number;\n    statusText: string;\n    headers: Record<string, string>;\n  };\n  config?: { url?: string; data?: unknown; method?: string; headers?: Record<string, string> };\n};\n\nexport function isAxiosError(payload: unknown): payload is AxiosError {\n  return (\n    payload !== null &&\n    typeof payload === 'object' &&\n    'isAxiosError' in payload &&\n    payload.isAxiosError === true\n  );\n}\n\nexport function errorHandler<E extends Env = never>(\n  error: Error | HTTPResponseError,\n  c: Context<E>\n): Response | Promise<Response> {\n  const requestId = c.get('requestId');\n  const servingData = `${c.req.method}: ${c.req.path}`;\n  const details = Details.new().requestInfo({ requestId, servingData });\n\n  if (error instanceof StatusError) {\n    error.body?.error?.details?.push(...details.list);\n    const badRequest = error.body?.error?.details.find(\n      (d) => d['@type'] === DetailType.BAD_REQUEST\n    );\n    if (badRequest) console.warn(servingData, badRequest);\n    console.error(servingData, JSON.stringify(error.body?.error ?? {}, null, 2));\n    return c.json(error.body, error.status as ContentfulStatusCode);\n  }\n\n  if (isAxiosError(error)) {\n    console.error({\n      status: error.status,\n      message: error.message,\n      request: {\n        method: error.config?.method,\n        url: error.config?.url,\n        data: error.config?.data,\n      },\n      response: { data: error.response?.data },\n    });\n    return Status.internal('Axios error').response(details);\n  }\n\n  console.error(`Unknown error: ${servingData}`, error);\n  return Status.internal('Unknown error').response(details);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,oBAAoC;AACpC,oBAAoC;AAsB7B,SAAS,aAAa,SAAyC;AACpE,SACE,YAAY,QACZ,OAAO,YAAY,YACnB,kBAAkB,WAClB,QAAQ,iBAAiB;AAE7B;AAEO,SAAS,aACd,OACA,GAC8B;AAC9B,QAAM,YAAY,EAAE,IAAI,WAAW;AACnC,QAAM,cAAc,GAAG,EAAE,IAAI,MAAM,KAAK,EAAE,IAAI,IAAI;AAClD,QAAM,UAAU,sBAAQ,IAAI,EAAE,YAAY,EAAE,WAAW,YAAY,CAAC;AAEpE,MAAI,iBAAiB,2BAAa;AAChC,UAAM,MAAM,OAAO,SAAS,KAAK,GAAG,QAAQ,IAAI;AAChD,UAAM,aAAa,MAAM,MAAM,OAAO,QAAQ;AAAA,MAC5C,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW;AAAA,IACnC;AACA,QAAI,WAAY,SAAQ,KAAK,aAAa,UAAU;AACpD,YAAQ,MAAM,aAAa,KAAK,UAAU,MAAM,MAAM,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3E,WAAO,EAAE,KAAK,MAAM,MAAM,MAAM,MAA8B;AAAA,EAChE;AAEA,MAAI,aAAa,KAAK,GAAG;AACvB,YAAQ,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,SAAS;AAAA,QACP,QAAQ,MAAM,QAAQ;AAAA,QACtB,KAAK,MAAM,QAAQ;AAAA,QACnB,MAAM,MAAM,QAAQ;AAAA,MACtB;AAAA,MACA,UAAU,EAAE,MAAM,MAAM,UAAU,KAAK;AAAA,IACzC,CAAC;AACD,WAAO,qBAAO,SAAS,aAAa,EAAE,SAAS,OAAO;AAAA,EACxD;AAEA,UAAQ,MAAM,kBAAkB,WAAW,IAAI,KAAK;AACpD,SAAO,qBAAO,SAAS,eAAe,EAAE,SAAS,OAAO;AAC1D;","names":[]}