lunaisadev-website-old/node_modules/@11ty/eleventy/src/EleventyErrorHandler.js

103 lines
2.7 KiB
JavaScript

const chalk = require("chalk");
const EleventyErrorUtil = require("./EleventyErrorUtil");
const debug = require("debug")("Eleventy:EleventyErrorHandler");
class EleventyErrorHandler {
static get isChalkEnabled() {
if (this._isChalkEnabled !== undefined) {
return this._isChalkEnabled;
}
return true;
}
static set isChalkEnabled(enabled) {
this._isChalkEnabled = !!enabled;
}
static warn(e, msg) {
if (msg) {
EleventyErrorHandler.initialMessage(msg, "warn", "yellow");
}
EleventyErrorHandler.log(e, "warn");
}
static fatal(e, msg) {
EleventyErrorHandler.error(e, msg);
process.exitCode = 1;
}
static error(e, msg) {
if (msg) {
EleventyErrorHandler.initialMessage(msg, "error", "red");
}
EleventyErrorHandler.log(e, "error");
}
//https://nodejs.org/api/process.html
static log(e, type = "log", prefix = ">") {
let ref = e;
while (ref) {
let nextRef = ref.originalError;
if (!nextRef && EleventyErrorUtil.hasEmbeddedError(ref.message)) {
nextRef = EleventyErrorUtil.deconvertErrorToObject(ref);
}
EleventyErrorHandler.message(
(process.env.DEBUG ? "" : `${prefix} `) +
`${(
EleventyErrorUtil.cleanMessage(ref.message) ||
"(No error message provided)"
).trim()}
\`${ref.name}\` was thrown${!nextRef && ref.stack ? ":" : ""}`,
type
);
if (process.env.DEBUG) {
debug(`(${type} stack): ${ref.stack}`);
} else if (!nextRef) {
// last error in the loop
let prefix = " ";
// remove duplicate error messages if the stack contains the original message output above
let stackStr = ref.stack || "";
if (e.removeDuplicateErrorStringFromOutput) {
stackStr = stackStr.replace(
`${ref.name}: ${ref.message}`,
"(Repeated output has been truncated…)"
);
}
EleventyErrorHandler.message(
prefix + stackStr.split("\n").join("\n" + prefix)
);
}
ref = nextRef;
}
}
static initialMessage(message, type = "log", chalkColor = "blue") {
if (message) {
EleventyErrorHandler.message(
message + ":" + (process.env.DEBUG ? "" : " (more in DEBUG output)"),
type,
chalkColor
);
}
}
static message(message, type = "log", chalkColor) {
if (process.env.DEBUG) {
debug(message);
} else {
let logger = EleventyErrorHandler.logger || console;
if (chalkColor && EleventyErrorHandler.isChalkEnabled) {
logger[type](chalk[chalkColor](message));
} else {
logger[type](message);
}
}
}
}
module.exports = EleventyErrorHandler;