diff --git a/packages/docusaurus-mdx-loader/src/loader.ts b/packages/docusaurus-mdx-loader/src/loader.ts index d62b73b7d27f..7b428646c74c 100644 --- a/packages/docusaurus-mdx-loader/src/loader.ts +++ b/packages/docusaurus-mdx-loader/src/loader.ts @@ -162,11 +162,21 @@ export async function mdxLoader( result = await processor.process({content, filePath}); } catch (errorUnknown) { const error = errorUnknown as Error; + + // MDX can emit errors that have useful extra attributes + const errorJSON = JSON.stringify(error, null, 2); + const errorDetails = + errorJSON === '{}' + ? // regular JS error case: print stacktrace + error.stack ?? 'N/A' + : // MDX error: print extra attributes + stacktrace + `${errorJSON}\n${error.stack}`; + return callback( new Error( `MDX compilation failed for file ${logger.path(filePath)}\nCause: ${ error.message - }\nDetails:\n${JSON.stringify(error, null, 2)}`, + }\nDetails:\n${errorDetails}`, // TODO error cause doesn't seem to be used by Webpack stats.errors :s {cause: error}, ),