diff --git a/packages/gatsby-cli/src/reporter/redux/internal-actions.ts b/packages/gatsby-cli/src/reporter/redux/internal-actions.ts index d06d2dbdf1716..51700f8204cfc 100644 --- a/packages/gatsby-cli/src/reporter/redux/internal-actions.ts +++ b/packages/gatsby-cli/src/reporter/redux/internal-actions.ts @@ -104,6 +104,7 @@ export const createLog = ({ activity_type, activity_uuid, stack, + pluginName, }: { level: string text?: string @@ -122,6 +123,7 @@ export const createLog = ({ activity_type?: string activity_uuid?: string stack?: IStructuredError["stack"] + pluginName?: string }): ICreateLog => { return { type: Actions.Log, @@ -144,6 +146,7 @@ export const createLog = ({ activity_uuid, timestamp: new Date().toJSON(), stack, + pluginName, }, } } diff --git a/packages/gatsby-cli/src/reporter/redux/types.ts b/packages/gatsby-cli/src/reporter/redux/types.ts index 1af2fa7ad7605..6d5e5da4978e2 100644 --- a/packages/gatsby-cli/src/reporter/redux/types.ts +++ b/packages/gatsby-cli/src/reporter/redux/types.ts @@ -54,6 +54,7 @@ interface ILog { activity_uuid: string | undefined timestamp: string stack: IStructuredError["stack"] | undefined + pluginName: string | undefined } export interface ICreateLog { diff --git a/packages/gatsby-cli/src/structured-errors/error-map.ts b/packages/gatsby-cli/src/structured-errors/error-map.ts index 3648ebfe87714..bde43bf84a0d9 100644 --- a/packages/gatsby-cli/src/structured-errors/error-map.ts +++ b/packages/gatsby-cli/src/structured-errors/error-map.ts @@ -17,9 +17,10 @@ export enum ErrorCategory { const errors = { "": { text: (context): string => { - const sourceMessage = context.sourceMessage - ? context.sourceMessage - : `There was an error` + const sourceMessage = + context && context.sourceMessage + ? context.sourceMessage + : `There was an error` return sourceMessage }, level: Level.ERROR, diff --git a/packages/gatsby-cli/src/structured-errors/error-schema.ts b/packages/gatsby-cli/src/structured-errors/error-schema.ts index 42ac9b035b3f0..873ba4496f8ee 100644 --- a/packages/gatsby-cli/src/structured-errors/error-schema.ts +++ b/packages/gatsby-cli/src/structured-errors/error-schema.ts @@ -36,5 +36,6 @@ export const errorSchema: Joi.ObjectSchema = Joi.object().keys context: Joi.object({}).unknown(), group: Joi.string(), panicOnBuild: Joi.boolean(), + pluginName: Joi.string(), } ) diff --git a/packages/gatsby/src/utils/api-runner-node.js b/packages/gatsby/src/utils/api-runner-node.js index d0116580acf31..e8c43fa5bb0c4 100644 --- a/packages/gatsby/src/utils/api-runner-node.js +++ b/packages/gatsby/src/utils/api-runner-node.js @@ -144,7 +144,7 @@ function extendErrorIdWithPluginName(pluginName, errorMeta) { return errorMeta } -function getErrorMapWthPluginName(pluginName, errorMap) { +function getErrorMapWithPluginName(pluginName, errorMap) { const entries = Object.entries(errorMap) return entries.reduce((memo, [key, val]) => { @@ -165,21 +165,55 @@ function extendLocalReporterToCatchPluginErrors({ let panic = reporter.panic let panicOnBuild = reporter.panicOnBuild + const addPluginNameToErrorMeta = (errorMeta, pluginName) => + typeof errorMeta === `string` + ? { + context: { + sourceMessage: errorMeta, + }, + pluginName, + } + : { + ...errorMeta, + pluginName, + } + if (pluginName && reporter?.setErrorMap) { setErrorMap = errorMap => - reporter.setErrorMap(getErrorMapWthPluginName(pluginName, errorMap)) + reporter.setErrorMap(getErrorMapWithPluginName(pluginName, errorMap)) - error = (errorMeta, error) => - reporter.error(extendErrorIdWithPluginName(pluginName, errorMeta), error) + error = (errorMeta, error) => { + const errorMetaWithPluginName = addPluginNameToErrorMeta( + errorMeta, + pluginName + ) + reporter.error( + extendErrorIdWithPluginName(pluginName, errorMetaWithPluginName), + error + ) + } - panic = (errorMeta, error) => - reporter.panic(extendErrorIdWithPluginName(pluginName, errorMeta), error) + panic = (errorMeta, error) => { + const errorMetaWithPluginName = addPluginNameToErrorMeta( + errorMeta, + pluginName + ) + reporter.panic( + extendErrorIdWithPluginName(pluginName, errorMetaWithPluginName), + error + ) + } - panicOnBuild = (errorMeta, error) => + panicOnBuild = (errorMeta, error) => { + const errorMetaWithPluginName = addPluginNameToErrorMeta( + errorMeta, + pluginName + ) reporter.panicOnBuild( - extendErrorIdWithPluginName(pluginName, errorMeta), + extendErrorIdWithPluginName(pluginName, errorMetaWithPluginName), error ) + } } return {