From 6c955ca643a7a071609ce8a5258cc7faf5a636b2 Mon Sep 17 00:00:00 2001 From: hippotastic <6137925+hippotastic@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:38:57 +0200 Subject: [PATCH] Fix Markdown errors missing source filename (#3514) --- .changeset/hot-waves-jump.md | 5 +++++ packages/markdown/remark/src/index.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 .changeset/hot-waves-jump.md diff --git a/.changeset/hot-waves-jump.md b/.changeset/hot-waves-jump.md new file mode 100644 index 0000000000..0febdb4872 --- /dev/null +++ b/.changeset/hot-waves-jump.md @@ -0,0 +1,5 @@ +--- +'@astrojs/markdown-remark': patch +--- + +Fix Markdown errors missing source filename diff --git a/packages/markdown/remark/src/index.ts b/packages/markdown/remark/src/index.ts index 5df5566a1a..2e9aa54fd1 100644 --- a/packages/markdown/remark/src/index.ts +++ b/packages/markdown/remark/src/index.ts @@ -109,6 +109,9 @@ export async function renderMarkdown( .process(input); result = vfile.toString(); } catch (err) { + // Ensure that the error message contains the input filename + // to make it easier for the user to fix the issue + err = prefixError(err, `Failed to parse Markdown file "${input.path}"`); console.error(err); throw err; } @@ -118,3 +121,27 @@ export async function renderMarkdown( code: result.toString(), }; } + +function prefixError(err: any, prefix: string) { + // If the error is an object with a `message` property, attempt to prefix the message + if (err && err.message) { + try { + err.message = `${prefix}:\n${err.message}`; + return err; + } catch (error) { + // Any errors here are ok, there's fallback code below + } + } + + // If that failed, create a new error with the desired message and attempt to keep the stack + const wrappedError = new Error(`${prefix}${err ? `: ${err}` : ''}`); + try { + wrappedError.stack = err.stack; + // @ts-ignore + wrappedError.cause = err; + } catch (error) { + // It's ok if we could not set the stack or cause - the message is the most important part + } + + return wrappedError; +}