{"version":3,"file":"errorHandler.mjs","names":[],"sources":["../../src/nitro/errorHandler.ts"],"sourcesContent":["// Import from specific subpath — the barrel 'nitropack/runtime' re-exports from\n// internal/app.mjs which imports virtual modules that crash outside rollup builds.\nimport { defineNitroErrorHandler } from 'nitropack/runtime/internal/error/utils'\nimport { getRequestURL, setResponseHeader, setResponseStatus, send } from 'h3'\nimport { resolveMxllogError, extractErrorStatus, serializeMxllogErrorResponse } from '../nitro'\n\n/**\n * Custom Nitro error handler that properly serializes MxllogError.\n * This ensures that 'data' (containing 'why', 'fix', 'link') is preserved\n * in the JSON response regardless of the underlying HTTP framework.\n *\n * For non-MxllogError, it preserves Nitro's default response shape while\n * sanitizing internal error details in production for 5xx errors.\n */\nexport default defineNitroErrorHandler((error, event) => {\n  const mxllogError = resolveMxllogError(error)\n\n  const isDev = process.env.NODE_ENV === 'development'\n  const url = getRequestURL(event, { xForwardedHost: true }).pathname\n\n  // For non-MxllogError, preserve Nitro's default response shape\n  if (!mxllogError) {\n    const status = extractErrorStatus(error)\n\n    // Derive message from statusText/statusMessage/message for cross-version compatibility\n    const rawMessage = ((error as { statusText?: string }).statusText\n      ?? (error as { statusMessage?: string }).statusMessage\n      ?? error.message) || 'Internal Server Error'\n\n    // Sanitize internal error details in production for 5xx errors\n    const message = isDev\n      ? rawMessage\n      : (status >= 500 ? 'Internal Server Error' : rawMessage)\n\n    setResponseStatus(event, status)\n    setResponseHeader(event, 'Content-Type', 'application/json')\n\n    return send(event, JSON.stringify({\n      url,\n      status,\n      statusCode: status,\n      statusText: message,\n      statusMessage: message,\n      message,\n      error: true,\n    }))\n  }\n\n  const status = extractErrorStatus(mxllogError)\n\n  setResponseStatus(event, status)\n  setResponseHeader(event, 'Content-Type', 'application/json')\n\n  return send(event, JSON.stringify(serializeMxllogErrorResponse(mxllogError, url)))\n})\n"],"mappings":";;;;;;;;;;;;;AAcA,IAAA,uBAAe,yBAAyB,OAAO,UAAU;CACvD,MAAM,cAAc,mBAAmB,MAAM;CAE7C,MAAM,QAAQ,QAAQ,IAAI,aAAa;CACvC,MAAM,MAAM,cAAc,OAAO,EAAE,gBAAgB,MAAM,CAAC,CAAC;AAG3D,KAAI,CAAC,aAAa;EAChB,MAAM,SAAS,mBAAmB,MAAM;EAGxC,MAAM,cAAe,MAAkC,cACjD,MAAqC,iBACtC,MAAM,YAAY;EAGvB,MAAM,UAAU,QACZ,aACC,UAAU,MAAM,0BAA0B;AAE/C,oBAAkB,OAAO,OAAO;AAChC,oBAAkB,OAAO,gBAAgB,mBAAmB;AAE5D,SAAO,KAAK,OAAO,KAAK,UAAU;GAChC;GACA;GACA,YAAY;GACZ,YAAY;GACZ,eAAe;GACf;GACA,OAAO;GACR,CAAC,CAAC;;AAKL,mBAAkB,OAFH,mBAAmB,YAAY,CAEd;AAChC,mBAAkB,OAAO,gBAAgB,mBAAmB;AAE5D,QAAO,KAAK,OAAO,KAAK,UAAU,6BAA6B,aAAa,IAAI,CAAC,CAAC;EAClF"}