summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js')
-rw-r--r--node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js b/node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js
new file mode 100644
index 0000000..6b374d0
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/Errors/EleventyErrorUtil.js
@@ -0,0 +1,70 @@
+import TemplateContentPrematureUseError from "./TemplateContentPrematureUseError.js";
+
+/* Hack to workaround the variety of error handling schemes in template languages */
+class EleventyErrorUtil {
+ static get prefix() {
+ return ">>>>>11ty>>>>>";
+ }
+ static get suffix() {
+ return "<<<<<11ty<<<<<";
+ }
+
+ static hasEmbeddedError(msg) {
+ if (!msg) {
+ return false;
+ }
+
+ return msg.includes(EleventyErrorUtil.prefix) && msg.includes(EleventyErrorUtil.suffix);
+ }
+
+ static cleanMessage(msg) {
+ if (!msg) {
+ return "";
+ }
+
+ if (!EleventyErrorUtil.hasEmbeddedError(msg)) {
+ return "" + msg;
+ }
+
+ return msg.slice(0, Math.max(0, msg.indexOf(EleventyErrorUtil.prefix)));
+ }
+
+ static deconvertErrorToObject(error) {
+ if (!error || !error.message) {
+ throw new Error(`Could not convert error object from: ${error}`);
+ }
+ if (!EleventyErrorUtil.hasEmbeddedError(error.message)) {
+ return error;
+ }
+
+ let msg = error.message;
+ let objectString = msg.substring(
+ msg.indexOf(EleventyErrorUtil.prefix) + EleventyErrorUtil.prefix.length,
+ msg.lastIndexOf(EleventyErrorUtil.suffix),
+ );
+ let obj = JSON.parse(objectString);
+ obj.name = error.name;
+ return obj;
+ }
+
+ // pass an error through a random template engine’s error handling unscathed
+ static convertErrorToString(error) {
+ return (
+ EleventyErrorUtil.prefix +
+ JSON.stringify({ message: error.message, stack: error.stack }) +
+ EleventyErrorUtil.suffix
+ );
+ }
+
+ static isPrematureTemplateContentError(e) {
+ // TODO the rest of the template engines
+ return (
+ e instanceof TemplateContentPrematureUseError ||
+ e?.cause instanceof TemplateContentPrematureUseError || // Custom (per Node-convention)
+ ["RenderError", "UndefinedVariableError"].includes(e?.originalError?.name) && e?.originalError?.originalError instanceof TemplateContentPrematureUseError || // Liquid
+ e?.message?.includes("TemplateContentPrematureUseError") // Nunjucks
+ );
+ }
+}
+
+export default EleventyErrorUtil;