{"version":3,"file":"index-node18.mjs","sources":["../src/index.ts"],"sourcesContent":["import { STATUS_CODES } from 'node:http';\nimport type { Context, HtmlError } from 'alp-types';\nimport ErrorHtmlRenderer from 'error-html';\nimport { Logger } from 'nightingale-logger';\n\nconst logger = new Logger('alp:errors');\nconst errorHtmlRenderer = new ErrorHtmlRenderer({\n  appPath: `${process.cwd()}/`,\n});\n\nexport default async function alpNodeErrors(\n  ctx: Context,\n  next: () => Promise<void> | void,\n): Promise<void> {\n  try {\n    await next();\n  } catch (error: unknown) {\n    // eslint-disable-next-line no-ex-assign\n    if (!error) error = new Error('Unknown error');\n    // eslint-disable-next-line no-ex-assign\n    if (typeof error === 'string') error = new Error(error);\n\n    ctx.status = (error as HtmlError).status || 500;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    logger.error(error as any);\n\n    // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n    switch (ctx.request.accepts('html', 'text', 'json')) {\n      case 'text':\n        ctx.type = 'text/plain';\n        if (\n          process.env.NODE_ENV !== 'production' ||\n          (error as HtmlError).expose\n        ) {\n          ctx.body = (error as Error).message;\n        } else {\n          throw error;\n        }\n\n        break;\n\n      case 'json':\n        ctx.type = 'application/json';\n        if (\n          process.env.NODE_ENV !== 'production' ||\n          (error as HtmlError).expose\n        ) {\n          ctx.body = { error: (error as Error).message };\n        } else {\n          ctx.body = { error: STATUS_CODES[ctx.status] };\n        }\n\n        break;\n\n      case 'html':\n        ctx.type = 'text/html';\n        if (process.env.NODE_ENV !== 'production') {\n          ctx.body = errorHtmlRenderer.render(error as Error);\n        } else if ((error as HtmlError).expose) {\n          ctx.body = (error as Error).message;\n        } else {\n          throw error;\n        }\n\n        break;\n    }\n  }\n}\n"],"names":["logger","Logger","errorHtmlRenderer","ErrorHtmlRenderer","appPath","process","cwd","alpNodeErrors","ctx","next","error","Error","status","request","accepts","type","env","NODE_ENV","expose","body","message","STATUS_CODES","render"],"mappings":";;;;AAKA,MAAMA,MAAM,GAAG,IAAIC,MAAM,CAAC,YAAY,CAAC,CAAA;AACvC,MAAMC,iBAAiB,GAAG,IAAIC,iBAAiB,CAAC;AAC9CC,EAAAA,OAAO,EAAG,CAAEC,EAAAA,OAAO,CAACC,GAAG,EAAG,CAAA,CAAA,CAAA;AAC5B,CAAC,CAAC,CAAA;AAEa,eAAeC,aAAaA,CACzCC,GAAY,EACZC,IAAgC,EACjB;EACf,IAAI;IACF,MAAMA,IAAI,EAAE,CAAA;GACb,CAAC,OAAOC,KAAc,EAAE;AACvB;IACA,IAAI,CAACA,KAAK,EAAEA,KAAK,GAAG,IAAIC,KAAK,CAAC,eAAe,CAAC,CAAA;AAC9C;IACA,IAAI,OAAOD,KAAK,KAAK,QAAQ,EAAEA,KAAK,GAAG,IAAIC,KAAK,CAACD,KAAK,CAAC,CAAA;AAEvDF,IAAAA,GAAG,CAACI,MAAM,GAAIF,KAAK,CAAeE,MAAM,IAAI,GAAG,CAAA;AAC/C;AACAZ,IAAAA,MAAM,CAACU,KAAK,CAACA,KAAY,CAAC,CAAA;;AAE1B;IACA,QAAQF,GAAG,CAACK,OAAO,CAACC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AACjD,MAAA,KAAK,MAAM;QACTN,GAAG,CAACO,IAAI,GAAG,YAAY,CAAA;QACvB,IACEV,OAAO,CAACW,GAAG,CAACC,QAAQ,KAAK,YAAY,IACpCP,KAAK,CAAeQ,MAAM,EAC3B;AACAV,UAAAA,GAAG,CAACW,IAAI,GAAIT,KAAK,CAAWU,OAAO,CAAA;AACrC,SAAC,MAAM;AACL,UAAA,MAAMV,KAAK,CAAA;AACb,SAAA;AAEA,QAAA,MAAA;AAEF,MAAA,KAAK,MAAM;QACTF,GAAG,CAACO,IAAI,GAAG,kBAAkB,CAAA;QAC7B,IACEV,OAAO,CAACW,GAAG,CAACC,QAAQ,KAAK,YAAY,IACpCP,KAAK,CAAeQ,MAAM,EAC3B;UACAV,GAAG,CAACW,IAAI,GAAG;YAAET,KAAK,EAAGA,KAAK,CAAWU,OAAAA;WAAS,CAAA;AAChD,SAAC,MAAM;UACLZ,GAAG,CAACW,IAAI,GAAG;AAAET,YAAAA,KAAK,EAAEW,YAAY,CAACb,GAAG,CAACI,MAAM,CAAA;WAAG,CAAA;AAChD,SAAA;AAEA,QAAA,MAAA;AAEF,MAAA,KAAK,MAAM;QACTJ,GAAG,CAACO,IAAI,GAAG,WAAW,CAAA;AACtB,QAAA,IAAIV,OAAO,CAACW,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;UACzCT,GAAG,CAACW,IAAI,GAAGjB,iBAAiB,CAACoB,MAAM,CAACZ,KAAc,CAAC,CAAA;AACrD,SAAC,MAAM,IAAKA,KAAK,CAAeQ,MAAM,EAAE;AACtCV,UAAAA,GAAG,CAACW,IAAI,GAAIT,KAAK,CAAWU,OAAO,CAAA;AACrC,SAAC,MAAM;AACL,UAAA,MAAMV,KAAK,CAAA;AACb,SAAA;AAEA,QAAA,MAAA;AACJ,KAAA;AACF,GAAA;AACF;;;;"}