UNPKG

vite-plugin-react-server

Version:
70 lines (68 loc) 2.13 kB
import { createLogger, type Logger } from "vite"; import { getNodeEnv } from "../config/getNodeEnv.js"; /** * Simple error logging function focused purely on logging errors * without any deduplication or complex formatting logic */ export function logError( err: Error, logger: Logger | Console = createLogger(), mode: "development" | "production" | "test" = getNodeEnv() ) { // when a proper logger is provided if (logger == null || typeof logger.error !== "function") { logger = console; } const errorOptions = { error: err, clear: mode === "development", timestamp: mode !== "test", }; // Simple error logging based on mode if (mode !== "production") { if ( err.stack && (err.message?.length ?? 0) > 0 && err.stack.includes(err.message) ) { logger.error(err.stack, errorOptions); } else if ((err.stack?.length ?? 0) > 0 && (err.message?.length ?? 0) > 0) { logger.error(err.message + "\n" + err.stack, errorOptions); } else if ((err.stack?.length ?? 0) > 0 && typeof err.stack === "string") { logger.error(err.stack, errorOptions); } else if ((err.message?.length ?? 0) > 0) { logger.error(err.message, errorOptions); } else { logger.error("Unknown error", errorOptions); } } else { // Production mode - simplified logging if (typeof err.message === "string") { logger.error(err.message, errorOptions); } else if ( typeof err.message === "object" && err.message !== null && "message" in err.message ) { logger.error(err.message, errorOptions); } else if (err.stack) { logger.error(err.stack, errorOptions); } else if ( err != null && typeof err === "object" && "reason" in err && typeof err.reason === "string" ) { logger.error(err.reason, errorOptions); } else if ( err != null && typeof err === "object" && "error" in err && typeof err.error === "string" ) { logger.error(err.error, errorOptions); } else { logger.error(JSON.stringify(err), errorOptions); } } }