diff --git a/.changeset/hot-waves-jump.md b/.changeset/hot-waves-jump.md new file mode 100644 index 000000000..0febdb487 --- /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 5df5566a1..2e9aa54fd 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; +}