2025-09-05 14:59:21 +08:00

31 lines
1.5 KiB
JavaScript

import { getRequestHeader } from "h3";
export function isJsonRequest(event) {
if (hasReqHeader(event, "accept", "text/html")) {
return false;
}
return hasReqHeader(event, "accept", "application/json") || hasReqHeader(event, "user-agent", "curl/") || hasReqHeader(event, "user-agent", "httpie/") || hasReqHeader(event, "sec-fetch-mode", "cors") || event.path.startsWith("/api/") || event.path.endsWith(".json");
}
function hasReqHeader(event, name, includes) {
const value = getRequestHeader(event, name);
return value && typeof value === "string" && value.toLowerCase().includes(includes);
}
export function normalizeError(error, isDev) {
const cwd = typeof process.cwd === "function" ? process.cwd() : "/";
const stack = !isDev && !import.meta.prerender && (error.unhandled || error.fatal) ? [] : (error.stack || "").split("\n").splice(1).filter((line) => line.includes("at ")).map((line) => {
const text = line.replace(cwd + "/", "./").replace("webpack:/", "").replace("file://", "").trim();
return {
text,
internal: line.includes("node_modules") && !line.includes(".cache") || line.includes("internal") || line.includes("new Promise")
};
});
const statusCode = error.statusCode || 500;
const statusMessage = error.statusMessage ?? (statusCode === 404 ? "Not Found" : "");
const message = !isDev && error.unhandled ? "internal server error" : error.message || error.toString();
return {
stack,
statusCode,
statusMessage,
message
};
}