From 48bbf3fc0494e229f27d29fa6dcd28ca5a48fcff Mon Sep 17 00:00:00 2001 From: Max Stoiber Date: Thu, 29 Oct 2020 08:29:43 +0100 Subject: [PATCH 1/4] fix(gatsby): log plugin parentDir if it differs from the rootDir --- .../src/structured-errors/error-map.ts | 4 +++- .../load-plugins/__tests__/load-plugins.ts | 3 +++ .../src/bootstrap/load-plugins/index.ts | 2 +- .../src/bootstrap/load-plugins/validate.ts | 22 +++++++++++++++---- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/gatsby-cli/src/structured-errors/error-map.ts b/packages/gatsby-cli/src/structured-errors/error-map.ts index 2632acb24b882..3648ebfe87714 100644 --- a/packages/gatsby-cli/src/structured-errors/error-map.ts +++ b/packages/gatsby-cli/src/structured-errors/error-map.ts @@ -468,7 +468,9 @@ const errors = { text: (context): string => [ stripIndent(` - Invalid plugin options for "${context.pluginName}": + Invalid plugin options for "${context.pluginName}"${ + context.configDir ? `, configured by ${context.configDir}` : `` + }: `), ] .concat([``]) diff --git a/packages/gatsby/src/bootstrap/load-plugins/__tests__/load-plugins.ts b/packages/gatsby/src/bootstrap/load-plugins/__tests__/load-plugins.ts index 9eab52afe0dc6..c8d98d76e1d31 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/__tests__/load-plugins.ts +++ b/packages/gatsby/src/bootstrap/load-plugins/__tests__/load-plugins.ts @@ -225,6 +225,7 @@ describe(`Load plugins`, () => { Array [ Object { "context": Object { + "configDir": null, "pluginName": "gatsby-plugin-google-analytics", "validationErrors": Array [ Object { @@ -262,6 +263,7 @@ describe(`Load plugins`, () => { Array [ Object { "context": Object { + "configDir": null, "pluginName": "gatsby-plugin-google-analytics", "validationErrors": Array [ Object { @@ -339,6 +341,7 @@ describe(`Load plugins`, () => { Array [ Object { "context": Object { + "configDir": null, "pluginName": "gatsby-remark-autolink-headers", "validationErrors": Array [ Object { diff --git a/packages/gatsby/src/bootstrap/load-plugins/index.ts b/packages/gatsby/src/bootstrap/load-plugins/index.ts index e61898aa95f5e..296f1e9eeb708 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/index.ts +++ b/packages/gatsby/src/bootstrap/load-plugins/index.ts @@ -89,7 +89,7 @@ export async function loadPlugins( // Show errors for invalid plugin configuration if (process.env.GATSBY_EXPERIMENTAL_PLUGIN_OPTION_VALIDATION) { - await validateConfigPluginsOptions(config) + await validateConfigPluginsOptions(config, rootDir) } const currentAPIs = getAPI({ diff --git a/packages/gatsby/src/bootstrap/load-plugins/validate.ts b/packages/gatsby/src/bootstrap/load-plugins/validate.ts index c4628dd83b145..f127504bfa581 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/validate.ts +++ b/packages/gatsby/src/bootstrap/load-plugins/validate.ts @@ -1,4 +1,5 @@ import _ from "lodash" +import path from "path" import * as semver from "semver" import * as stringSimilarity from "string-similarity" import { version as gatsbyVersion } from "gatsby/package.json" @@ -174,7 +175,8 @@ export async function handleBadExports({ } async function validatePluginsOptions( - plugins: Array + plugins: Array, + rootDir: string | null ): Promise<{ errors: number plugins: Array @@ -227,20 +229,28 @@ async function validatePluginsOptions( errors: subErrors, plugins: subPlugins, } = await validatePluginsOptions( - plugin.options.plugins as Array + plugin.options.plugins as Array, + rootDir ) plugin.options.plugins = subPlugins errors += subErrors } } catch (error) { if (error instanceof Joi.ValidationError) { + console.log(``) reporter.error({ id: `11331`, context: { + configDir: + (plugin.parentDir && + rootDir && + path.relative(rootDir, plugin.parentDir)) || + null, validationErrors: error.details, pluginName: plugin.resolve, }, }) + console.log(``) errors++ return plugin @@ -256,11 +266,15 @@ async function validatePluginsOptions( } export async function validateConfigPluginsOptions( - config: ISiteConfig = {} + config: ISiteConfig = {}, + rootDir: string | null ): Promise { if (!config.plugins) return - const { errors, plugins } = await validatePluginsOptions(config.plugins) + const { errors, plugins } = await validatePluginsOptions( + config.plugins, + rootDir + ) config.plugins = plugins From 2d31237292d605d02fcd919cf030500e85595e9a Mon Sep 17 00:00:00 2001 From: Max Stoiber Date: Thu, 29 Oct 2020 08:37:01 +0100 Subject: [PATCH 2/4] Dont block in case of sub-theme error --- .../src/bootstrap/load-plugins/validate.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/gatsby/src/bootstrap/load-plugins/validate.ts b/packages/gatsby/src/bootstrap/load-plugins/validate.ts index f127504bfa581..e45bf9f451969 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/validate.ts +++ b/packages/gatsby/src/bootstrap/load-plugins/validate.ts @@ -237,21 +237,28 @@ async function validatePluginsOptions( } } catch (error) { if (error instanceof Joi.ValidationError) { + // If rootDir and plugin.parentDir are the same, i.e. if this is a plugin a user configured in their gatsby-config.js (and not a sub-theme that added it), this will be "" + // Otherwise, this will contain (and show) the relative path and warn instead of error + const configDir = + (plugin.parentDir && + rootDir && + path.relative(rootDir, plugin.parentDir)) || + null console.log(``) reporter.error({ id: `11331`, context: { - configDir: - (plugin.parentDir && - rootDir && - path.relative(rootDir, plugin.parentDir)) || - null, + configDir, validationErrors: error.details, pluginName: plugin.resolve, }, }) console.log(``) - errors++ + + // Only process.exit if it's an error the user can fix + if (!configDir) { + errors++ + } return plugin } From 668f8fa9a9adfacbb9675ada0b076a6d211c814a Mon Sep 17 00:00:00 2001 From: Max Stoiber Date: Thu, 29 Oct 2020 08:42:48 +0100 Subject: [PATCH 3/4] Remove superfluous console.logs --- packages/gatsby/src/bootstrap/load-plugins/validate.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/gatsby/src/bootstrap/load-plugins/validate.ts b/packages/gatsby/src/bootstrap/load-plugins/validate.ts index e45bf9f451969..dd3a82e64bc8a 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/validate.ts +++ b/packages/gatsby/src/bootstrap/load-plugins/validate.ts @@ -244,7 +244,6 @@ async function validatePluginsOptions( rootDir && path.relative(rootDir, plugin.parentDir)) || null - console.log(``) reporter.error({ id: `11331`, context: { @@ -253,7 +252,6 @@ async function validatePluginsOptions( pluginName: plugin.resolve, }, }) - console.log(``) // Only process.exit if it's an error the user can fix if (!configDir) { From e93e630ccfc6013fe1c133786ed2b149dbfc91f1 Mon Sep 17 00:00:00 2001 From: Max Stoiber Date: Fri, 30 Oct 2020 09:40:31 +0100 Subject: [PATCH 4/4] Error on non-root config errors --- packages/gatsby/src/bootstrap/load-plugins/validate.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/gatsby/src/bootstrap/load-plugins/validate.ts b/packages/gatsby/src/bootstrap/load-plugins/validate.ts index dd3a82e64bc8a..b29107379e2e2 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/validate.ts +++ b/packages/gatsby/src/bootstrap/load-plugins/validate.ts @@ -238,7 +238,7 @@ async function validatePluginsOptions( } catch (error) { if (error instanceof Joi.ValidationError) { // If rootDir and plugin.parentDir are the same, i.e. if this is a plugin a user configured in their gatsby-config.js (and not a sub-theme that added it), this will be "" - // Otherwise, this will contain (and show) the relative path and warn instead of error + // Otherwise, this will contain (and show) the relative path const configDir = (plugin.parentDir && rootDir && @@ -252,11 +252,7 @@ async function validatePluginsOptions( pluginName: plugin.resolve, }, }) - - // Only process.exit if it's an error the user can fix - if (!configDir) { - errors++ - } + errors++ return plugin }