gatsby 4.1.1 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,6 +52,7 @@ const flattenPlugins = plugins => {
52
52
  }
53
53
  }
54
54
 
55
+ roots = roots.flat();
55
56
  roots.forEach(subPlugin => {
56
57
  flattened.push(subPlugin);
57
58
  extractPlugins(subPlugin);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/bootstrap/load-plugins/index.ts"],"names":["getAPI","api","_","keys","reduce","merged","key","flattenPlugins","plugins","flattened","extractPlugins","plugin","subPluginPaths","subPluginPath","segments","split","roots","pluginOptions","segment","flat","map","root","forEach","subPlugin","push","normalizePlugin","resolve","options","normalizePlugins","normalizeConfig","config","loadPlugins","rawConfig","rootDir","currentAPIs","browser","browserAPIs","node","nodeAPIs","ssr","ssrAPIs","pluginInfos","pluginArray","x","flattenedPlugins","badExports","store","dispatch","type","payload"],"mappings":"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","sourcesContent":["import _ from \"lodash\"\n\nimport { store } from \"../../redux\"\nimport { IGatsbyState } from \"../../redux/types\"\nimport * as nodeAPIs from \"../../utils/api-node-docs\"\nimport * as browserAPIs from \"../../utils/api-browser-docs\"\nimport ssrAPIs from \"../../../cache-dir/api-ssr-docs\"\nimport { loadPlugins as loadPluginsInternal } from \"./load\"\nimport {\n collatePluginAPIs,\n handleBadExports,\n handleMultipleReplaceRenderers,\n ExportType,\n ICurrentAPIs,\n validateConfigPluginsOptions,\n} from \"./validate\"\nimport {\n IPluginInfo,\n IFlattenedPlugin,\n ISiteConfig,\n IRawSiteConfig,\n} from \"./types\"\nimport { IPluginRefObject, PluginRef } from \"gatsby-plugin-utils/dist/types\"\n\nconst getAPI = (api: {\n [exportType in ExportType]: { [api: string]: boolean }\n}): ICurrentAPIs =>\n _.keys(api).reduce<Partial<ICurrentAPIs>>((merged, key) => {\n merged[key] = _.keys(api[key])\n return merged\n }, {}) as ICurrentAPIs\n\n// Create a \"flattened\" array of plugins with all subplugins\n// brought to the top-level. This simplifies running gatsby-* files\n// for subplugins.\nconst flattenPlugins = (plugins: Array<IPluginInfo>): Array<IPluginInfo> => {\n const flattened: Array<IPluginInfo> = []\n const extractPlugins = (plugin: IPluginInfo): void => {\n if (plugin.subPluginPaths) {\n for (const subPluginPath of plugin.subPluginPaths) {\n // @pieh:\n // subPluginPath can look like someOption.randomFieldThatIsMarkedAsSubplugins\n // Reason for doing stringified path with . separator was that it was just easier to prevent duplicates\n // in subPluginPaths array (as each subplugin in the gatsby-config would add subplugin path).\n const segments = subPluginPath.split(`.`)\n let roots: Array<any> = [plugin.pluginOptions]\n for (const segment of segments) {\n if (segment === `[]`) {\n roots = roots.flat()\n } else {\n roots = roots.map(root => root[segment])\n }\n }\n\n roots.forEach(subPlugin => {\n flattened.push(subPlugin)\n extractPlugins(subPlugin)\n })\n }\n }\n }\n\n plugins.forEach(plugin => {\n flattened.push(plugin)\n extractPlugins(plugin)\n })\n\n return flattened\n}\n\nfunction normalizePlugin(plugin): IPluginRefObject {\n if (typeof plugin === `string`) {\n return {\n resolve: plugin,\n options: {},\n }\n }\n\n if (plugin.options?.plugins) {\n plugin.options = {\n ...plugin.options,\n plugins: normalizePlugins(plugin.options.plugins),\n }\n }\n\n return plugin\n}\n\nfunction normalizePlugins(plugins?: Array<PluginRef>): Array<IPluginRefObject> {\n return (plugins || []).map(normalizePlugin)\n}\n\nconst normalizeConfig = (config: IRawSiteConfig = {}): ISiteConfig => {\n return {\n ...config,\n plugins: (config.plugins || []).map(normalizePlugin),\n }\n}\n\nexport async function loadPlugins(\n rawConfig: IRawSiteConfig = {},\n rootDir: string\n): Promise<Array<IFlattenedPlugin>> {\n // Turn all strings in plugins: [`...`] into the { resolve: ``, options: {} } form\n const config = normalizeConfig(rawConfig)\n\n // Show errors for invalid plugin configuration\n await validateConfigPluginsOptions(config, rootDir)\n\n const currentAPIs = getAPI({\n browser: browserAPIs,\n node: nodeAPIs,\n ssr: ssrAPIs,\n })\n\n // Collate internal plugins, site config plugins, site default plugins\n const pluginInfos = loadPluginsInternal(config, rootDir)\n\n // Create a flattened array of the plugins\n const pluginArray = flattenPlugins(pluginInfos)\n\n // Work out which plugins use which APIs, including those which are not\n // valid Gatsby APIs, aka 'badExports'\n const x = collatePluginAPIs({ currentAPIs, flattenedPlugins: pluginArray })\n\n // From this point on, these are fully-resolved plugins.\n let flattenedPlugins = x.flattenedPlugins\n const badExports = x.badExports\n\n // Show errors for any non-Gatsby APIs exported from plugins\n await handleBadExports({ currentAPIs, badExports })\n\n // Show errors when ReplaceRenderer has been implemented multiple times\n flattenedPlugins = handleMultipleReplaceRenderers({\n flattenedPlugins,\n })\n\n // If we get this far, everything looks good. Update the store\n store.dispatch({\n type: `SET_SITE_FLATTENED_PLUGINS`,\n payload: flattenedPlugins as IGatsbyState[\"flattenedPlugins\"],\n })\n\n return flattenedPlugins\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/bootstrap/load-plugins/index.ts"],"names":["getAPI","api","_","keys","reduce","merged","key","flattenPlugins","plugins","flattened","extractPlugins","plugin","subPluginPaths","subPluginPath","segments","split","roots","pluginOptions","segment","flat","map","root","forEach","subPlugin","push","normalizePlugin","resolve","options","normalizePlugins","normalizeConfig","config","loadPlugins","rawConfig","rootDir","currentAPIs","browser","browserAPIs","node","nodeAPIs","ssr","ssrAPIs","pluginInfos","pluginArray","x","flattenedPlugins","badExports","store","dispatch","type","payload"],"mappings":"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","sourcesContent":["import _ from \"lodash\"\n\nimport { store } from \"../../redux\"\nimport { IGatsbyState } from \"../../redux/types\"\nimport * as nodeAPIs from \"../../utils/api-node-docs\"\nimport * as browserAPIs from \"../../utils/api-browser-docs\"\nimport ssrAPIs from \"../../../cache-dir/api-ssr-docs\"\nimport { loadPlugins as loadPluginsInternal } from \"./load\"\nimport {\n collatePluginAPIs,\n handleBadExports,\n handleMultipleReplaceRenderers,\n ExportType,\n ICurrentAPIs,\n validateConfigPluginsOptions,\n} from \"./validate\"\nimport {\n IPluginInfo,\n IFlattenedPlugin,\n ISiteConfig,\n IRawSiteConfig,\n} from \"./types\"\nimport { IPluginRefObject, PluginRef } from \"gatsby-plugin-utils/dist/types\"\n\nconst getAPI = (api: {\n [exportType in ExportType]: { [api: string]: boolean }\n}): ICurrentAPIs =>\n _.keys(api).reduce<Partial<ICurrentAPIs>>((merged, key) => {\n merged[key] = _.keys(api[key])\n return merged\n }, {}) as ICurrentAPIs\n\n// Create a \"flattened\" array of plugins with all subplugins\n// brought to the top-level. This simplifies running gatsby-* files\n// for subplugins.\nconst flattenPlugins = (plugins: Array<IPluginInfo>): Array<IPluginInfo> => {\n const flattened: Array<IPluginInfo> = []\n const extractPlugins = (plugin: IPluginInfo): void => {\n if (plugin.subPluginPaths) {\n for (const subPluginPath of plugin.subPluginPaths) {\n // @pieh:\n // subPluginPath can look like someOption.randomFieldThatIsMarkedAsSubplugins\n // Reason for doing stringified path with . separator was that it was just easier to prevent duplicates\n // in subPluginPaths array (as each subplugin in the gatsby-config would add subplugin path).\n const segments = subPluginPath.split(`.`)\n let roots: Array<any> = [plugin.pluginOptions]\n for (const segment of segments) {\n if (segment === `[]`) {\n roots = roots.flat()\n } else {\n roots = roots.map(root => root[segment])\n }\n }\n roots = roots.flat()\n\n roots.forEach(subPlugin => {\n flattened.push(subPlugin)\n extractPlugins(subPlugin)\n })\n }\n }\n }\n\n plugins.forEach(plugin => {\n flattened.push(plugin)\n extractPlugins(plugin)\n })\n\n return flattened\n}\n\nfunction normalizePlugin(plugin): IPluginRefObject {\n if (typeof plugin === `string`) {\n return {\n resolve: plugin,\n options: {},\n }\n }\n\n if (plugin.options?.plugins) {\n plugin.options = {\n ...plugin.options,\n plugins: normalizePlugins(plugin.options.plugins),\n }\n }\n\n return plugin\n}\n\nfunction normalizePlugins(plugins?: Array<PluginRef>): Array<IPluginRefObject> {\n return (plugins || []).map(normalizePlugin)\n}\n\nconst normalizeConfig = (config: IRawSiteConfig = {}): ISiteConfig => {\n return {\n ...config,\n plugins: (config.plugins || []).map(normalizePlugin),\n }\n}\n\nexport async function loadPlugins(\n rawConfig: IRawSiteConfig = {},\n rootDir: string\n): Promise<Array<IFlattenedPlugin>> {\n // Turn all strings in plugins: [`...`] into the { resolve: ``, options: {} } form\n const config = normalizeConfig(rawConfig)\n\n // Show errors for invalid plugin configuration\n await validateConfigPluginsOptions(config, rootDir)\n\n const currentAPIs = getAPI({\n browser: browserAPIs,\n node: nodeAPIs,\n ssr: ssrAPIs,\n })\n\n // Collate internal plugins, site config plugins, site default plugins\n const pluginInfos = loadPluginsInternal(config, rootDir)\n\n // Create a flattened array of the plugins\n const pluginArray = flattenPlugins(pluginInfos)\n\n // Work out which plugins use which APIs, including those which are not\n // valid Gatsby APIs, aka 'badExports'\n const x = collatePluginAPIs({ currentAPIs, flattenedPlugins: pluginArray })\n\n // From this point on, these are fully-resolved plugins.\n let flattenedPlugins = x.flattenedPlugins\n const badExports = x.badExports\n\n // Show errors for any non-Gatsby APIs exported from plugins\n await handleBadExports({ currentAPIs, badExports })\n\n // Show errors when ReplaceRenderer has been implemented multiple times\n flattenedPlugins = handleMultipleReplaceRenderers({\n flattenedPlugins,\n })\n\n // If we get this far, everything looks good. Update the store\n store.dispatch({\n type: `SET_SITE_FLATTENED_PLUGINS`,\n payload: flattenedPlugins as IGatsbyState[\"flattenedPlugins\"],\n })\n\n return flattenedPlugins\n}\n"],"file":"index.js"}
@@ -187,6 +187,7 @@ function loadPlugins(config = {}, rootDir) {
187
187
  }
188
188
  }
189
189
 
190
+ roots = roots.flat();
190
191
  const processed = roots.map(processPlugin);
191
192
 
192
193
  _lodash.default.set(plugin.options, pathToSwap, processed);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/bootstrap/load-plugins/load.ts"],"names":["GATSBY_CLOUD_PLUGIN_NAME","TYPESCRIPT_PLUGIN_NAME","createFileContentHash","root","globPattern","hash","crypto","createHash","files","glob","sync","nodir","forEach","filepath","update","fs","readFileSync","digest","createPluginId","name","pluginObject","JSON","stringify","options","resolvePlugin","plugin","rootDir","pluginName","_","isString","resolve","parentDir","resolvedPath","path","join","packageJSON","parse","id","version","Error","requireSource","require","dirname","isAbsolute","err","process","env","gatsby_log_level","reporter","panicOnBuild","addGatsbyPluginCloudPluginWhenInstalled","plugins","processPlugin","cloudPluginLocation","push","incompatibleGatsbyCloudPlugin","find","semver","satisfies","includePrerelease","loadPlugins","config","configuredPluginNames","Set","info","pluginOptions","isEmpty","option","subPluginPaths","subPluginPath","segments","split","roots","pathToSwap","segment","slice","length","flat","map","processed","set","modulePath","module","Array","from","undefined","merge","internalPlugins","filter","Boolean","relPath","absPath","__dirname","processedPlugin","add","pathCheck","has","panic","GATSBY_CLOUD","allExtensions","isTSX","jsxPragma","cwd","program","store","getState","pageCreatorOptions","directory","pageCreatorPlugin"],"mappings":"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","sourcesContent":["import _ from \"lodash\"\nimport { slash, createRequireFromPath } from \"gatsby-core-utils\"\nimport fs from \"fs\"\nimport path from \"path\"\nimport crypto from \"crypto\"\nimport glob from \"glob\"\nimport { sync as existsSync } from \"fs-exists-cached\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport { silent as resolveFromSilent } from \"resolve-from\"\nimport * as semver from \"semver\"\nimport { warnOnIncompatiblePeerDependency } from \"./validate\"\nimport { store } from \"../../redux\"\nimport { createNodeId } from \"../../utils/create-node-id\"\nimport {\n IPluginInfo,\n PluginRef,\n IPluginRefObject,\n IPluginRefOptions,\n ISiteConfig,\n} from \"./types\"\nimport { PackageJson } from \"../../..\"\n\nconst GATSBY_CLOUD_PLUGIN_NAME = `gatsby-plugin-gatsby-cloud`\nconst TYPESCRIPT_PLUGIN_NAME = `gatsby-plugin-typescript`\n\nfunction createFileContentHash(root: string, globPattern: string): string {\n const hash = crypto.createHash(`md5`)\n const files = glob.sync(`${root}/${globPattern}`, { nodir: true })\n\n files.forEach(filepath => {\n hash.update(fs.readFileSync(filepath))\n })\n\n return hash.digest(`hex`)\n}\n\n/**\n * Make sure key is unique to plugin options. E.g. there could\n * be multiple source-filesystem plugins, with different names\n * (docs, blogs).\n *\n * @param name Name of the plugin\n * @param pluginObject Object of the plugin\n */\nconst createPluginId = (\n name: string,\n pluginObject: IPluginRefObject | null = null\n): string =>\n createNodeId(\n name + (pluginObject ? JSON.stringify(pluginObject.options) : ``),\n `Plugin`\n )\n\n/**\n * @param plugin\n * This should be a plugin spec object where possible but can also be the\n * name of a plugin.\n *\n * When it is a name, it can be a name of a local plugin, the name of a plugin\n * located in node_modules, or a Gatsby internal plugin. In the last case the\n * plugin will be an absolute path.\n * @param rootDir\n * This is the project location, from which are found the plugins\n */\nexport function resolvePlugin(\n plugin: PluginRef,\n rootDir: string | null\n): IPluginInfo {\n const pluginName = _.isString(plugin) ? plugin : plugin.resolve\n\n // Respect the directory that the plugin was sourced from initially\n rootDir = (!_.isString(plugin) && plugin.parentDir) || rootDir\n\n // Only find plugins when we're not given an absolute path\n if (!existsSync(pluginName) && rootDir) {\n // Find the plugin in the local plugins folder\n const resolvedPath = slash(path.join(rootDir, `plugins/${pluginName}`))\n\n if (existsSync(resolvedPath)) {\n if (existsSync(`${resolvedPath}/package.json`)) {\n const packageJSON = JSON.parse(\n fs.readFileSync(`${resolvedPath}/package.json`, `utf-8`)\n ) as PackageJson\n const name = packageJSON.name || pluginName\n warnOnIncompatiblePeerDependency(name, packageJSON)\n\n return {\n resolve: resolvedPath,\n name,\n id: createPluginId(name),\n version:\n packageJSON.version || createFileContentHash(resolvedPath, `**`),\n }\n } else {\n // Make package.json a requirement for local plugins too\n throw new Error(`Plugin ${pluginName} requires a package.json file`)\n }\n }\n }\n\n /**\n * Here we have an absolute path to an internal plugin, or a name of a module\n * which should be located in node_modules.\n */\n try {\n const requireSource =\n rootDir !== null\n ? createRequireFromPath(`${rootDir}/:internal:`)\n : require\n\n // If the path is absolute, resolve the directory of the internal plugin,\n // otherwise resolve the directory containing the package.json\n const resolvedPath = slash(\n path.dirname(\n requireSource.resolve(\n path.isAbsolute(pluginName)\n ? pluginName\n : `${pluginName}/package.json`\n )\n )\n )\n\n const packageJSON = JSON.parse(\n fs.readFileSync(`${resolvedPath}/package.json`, `utf-8`)\n )\n warnOnIncompatiblePeerDependency(packageJSON.name, packageJSON)\n\n return {\n resolve: resolvedPath,\n id: createPluginId(packageJSON.name),\n name: packageJSON.name,\n version: packageJSON.version,\n }\n } catch (err) {\n if (process.env.gatsby_log_level === `verbose`) {\n reporter.panicOnBuild(\n `plugin \"${pluginName} threw the following error:\\n`,\n err\n )\n } else {\n reporter.panicOnBuild(\n `There was a problem loading plugin \"${pluginName}\". Perhaps you need to install its package?\\nUse --verbose to see actual error.`\n )\n }\n throw new Error(`unreachable`)\n }\n}\n\nfunction addGatsbyPluginCloudPluginWhenInstalled(\n plugins: Array<IPluginInfo>,\n processPlugin: (plugin: PluginRef) => IPluginInfo,\n rootDir: string\n): void {\n const cloudPluginLocation = resolveFromSilent(\n rootDir,\n GATSBY_CLOUD_PLUGIN_NAME\n )\n\n if (cloudPluginLocation) {\n plugins.push(\n processPlugin({\n resolve: cloudPluginLocation,\n options: {},\n })\n )\n }\n}\n\nfunction incompatibleGatsbyCloudPlugin(plugins: Array<IPluginInfo>): boolean {\n const plugin = plugins.find(\n plugin => plugin.name === GATSBY_CLOUD_PLUGIN_NAME\n )\n\n return !semver.satisfies(plugin!.version, `>=4.0.0-alpha`, {\n includePrerelease: true,\n })\n}\n\nexport function loadPlugins(\n config: ISiteConfig = {},\n rootDir: string\n): Array<IPluginInfo> {\n // Instantiate plugins.\n const plugins: Array<IPluginInfo> = []\n const configuredPluginNames = new Set()\n\n // Create fake little site with a plugin for testing this\n // w/ snapshots. Move plugin processing to its own module.\n // Also test adding to redux store.\n function processPlugin(plugin: PluginRef): IPluginInfo {\n if (_.isString(plugin)) {\n const info = resolvePlugin(plugin, rootDir)\n\n return {\n ...info,\n pluginOptions: {\n plugins: [],\n },\n }\n } else {\n plugin.options = plugin.options || {}\n\n // Throw an error if there is an \"option\" key.\n if (\n _.isEmpty(plugin.options) &&\n !_.isEmpty((plugin as { option?: unknown }).option)\n ) {\n throw new Error(\n `Plugin \"${plugin.resolve}\" has an \"option\" key in the configuration. Did you mean \"options\"?`\n )\n }\n\n // Plugins can have plugins.\n if (plugin.subPluginPaths) {\n for (const subPluginPath of plugin.subPluginPaths) {\n const segments = subPluginPath.split(`.`)\n let roots: Array<any> = [plugin.options]\n\n let pathToSwap = segments\n\n for (const segment of segments) {\n if (segment === `[]`) {\n pathToSwap = pathToSwap.slice(0, pathToSwap.length - 1)\n roots = roots.flat()\n } else {\n roots = roots.map(root => root[segment])\n }\n }\n\n const processed = roots.map(processPlugin)\n _.set(plugin.options, pathToSwap, processed)\n }\n }\n\n // Add some default values for tests as we don't actually\n // want to try to load anything during tests.\n if (plugin.resolve === `___TEST___`) {\n const name = `TEST`\n\n return {\n id: createPluginId(name, plugin),\n name,\n version: `0.0.0-test`,\n pluginOptions: {\n plugins: [],\n },\n resolve: `__TEST__`,\n }\n }\n\n const info = resolvePlugin(plugin, rootDir)\n\n return {\n ...info,\n modulePath: plugin.modulePath,\n module: plugin.module,\n subPluginPaths: plugin.subPluginPaths\n ? Array.from(plugin.subPluginPaths)\n : undefined,\n id: createPluginId(info.name, plugin),\n pluginOptions: _.merge({ plugins: [] }, plugin.options),\n }\n }\n }\n\n // Add internal plugins\n const internalPlugins = [\n `../../internal-plugins/dev-404-page`,\n `../../internal-plugins/load-babel-config`,\n `../../internal-plugins/internal-data-bridge`,\n `../../internal-plugins/prod-404-500`,\n `../../internal-plugins/webpack-theme-component-shadowing`,\n `../../internal-plugins/bundle-optimisations`,\n `../../internal-plugins/functions`,\n ].filter(Boolean) as Array<string>\n internalPlugins.forEach(relPath => {\n const absPath = path.join(__dirname, relPath)\n plugins.push(processPlugin(absPath))\n })\n\n // Add plugins from the site config.\n if (config.plugins) {\n config.plugins.forEach(plugin => {\n const processedPlugin = processPlugin(plugin)\n plugins.push(processedPlugin)\n configuredPluginNames.add(processedPlugin.name)\n })\n }\n\n // the order of all of these page-creators matters. The \"last plugin wins\",\n // so the user's site comes last, and each page-creator instance has to\n // match the plugin definition order before that. This works fine for themes\n // because themes have already been added in the proper order to the plugins\n // array\n plugins.forEach(plugin => {\n plugins.push(\n processPlugin({\n resolve: require.resolve(`gatsby-plugin-page-creator`),\n options: {\n path: slash(path.join(plugin.resolve, `src/pages`)),\n pathCheck: false,\n },\n })\n )\n })\n\n if (\n _CFLAGS_.GATSBY_MAJOR === `4` &&\n configuredPluginNames.has(GATSBY_CLOUD_PLUGIN_NAME) &&\n incompatibleGatsbyCloudPlugin(plugins)\n ) {\n reporter.panic(\n `Plugin gatsby-plugin-gatsby-cloud is not compatible with your gatsby version. Please upgrade to gatsby-plugin-gatsby-cloud@next`\n )\n }\n\n if (\n !configuredPluginNames.has(GATSBY_CLOUD_PLUGIN_NAME) &&\n (process.env.GATSBY_CLOUD === `true` || process.env.GATSBY_CLOUD === `1`)\n ) {\n addGatsbyPluginCloudPluginWhenInstalled(plugins, processPlugin, rootDir)\n }\n\n // Suppor Typescript by default but allow users to override it\n if (!configuredPluginNames.has(TYPESCRIPT_PLUGIN_NAME)) {\n plugins.push(\n processPlugin({\n resolve: require.resolve(TYPESCRIPT_PLUGIN_NAME),\n options: {\n // TODO(@mxstbr): Do not hard-code these defaults but infer them from the\n // pluginOptionsSchema of gatsby-plugin-typescript\n allExtensions: false,\n isTSX: false,\n jsxPragma: `React`,\n },\n })\n )\n }\n\n // Add the site's default \"plugin\" i.e. gatsby-x files in root of site.\n plugins.push({\n resolve: slash(process.cwd()),\n id: createPluginId(`default-site-plugin`),\n name: `default-site-plugin`,\n version: createFileContentHash(process.cwd(), `gatsby-*`),\n pluginOptions: {\n plugins: [],\n },\n })\n\n const program = store.getState().program\n\n // default options for gatsby-plugin-page-creator\n let pageCreatorOptions: IPluginRefOptions | undefined = {\n path: slash(path.join(program.directory, `src/pages`)),\n pathCheck: false,\n }\n\n if (config.plugins) {\n const pageCreatorPlugin = config.plugins.find(\n (plugin): plugin is IPluginRefObject =>\n typeof plugin !== `string` &&\n plugin.resolve === `gatsby-plugin-page-creator` &&\n slash((plugin.options && plugin.options.path) || ``) ===\n slash(path.join(program.directory, `src/pages`))\n )\n if (pageCreatorPlugin) {\n // override the options if there are any user specified options\n pageCreatorOptions = pageCreatorPlugin.options\n }\n }\n\n plugins.push(\n processPlugin({\n resolve: require.resolve(`gatsby-plugin-page-creator`),\n options: pageCreatorOptions,\n })\n )\n\n return plugins\n}\n"],"file":"load.js"}
1
+ {"version":3,"sources":["../../../src/bootstrap/load-plugins/load.ts"],"names":["GATSBY_CLOUD_PLUGIN_NAME","TYPESCRIPT_PLUGIN_NAME","createFileContentHash","root","globPattern","hash","crypto","createHash","files","glob","sync","nodir","forEach","filepath","update","fs","readFileSync","digest","createPluginId","name","pluginObject","JSON","stringify","options","resolvePlugin","plugin","rootDir","pluginName","_","isString","resolve","parentDir","resolvedPath","path","join","packageJSON","parse","id","version","Error","requireSource","require","dirname","isAbsolute","err","process","env","gatsby_log_level","reporter","panicOnBuild","addGatsbyPluginCloudPluginWhenInstalled","plugins","processPlugin","cloudPluginLocation","push","incompatibleGatsbyCloudPlugin","find","semver","satisfies","includePrerelease","loadPlugins","config","configuredPluginNames","Set","info","pluginOptions","isEmpty","option","subPluginPaths","subPluginPath","segments","split","roots","pathToSwap","segment","slice","length","flat","map","processed","set","modulePath","module","Array","from","undefined","merge","internalPlugins","filter","Boolean","relPath","absPath","__dirname","processedPlugin","add","pathCheck","has","panic","GATSBY_CLOUD","allExtensions","isTSX","jsxPragma","cwd","program","store","getState","pageCreatorOptions","directory","pageCreatorPlugin"],"mappings":"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","sourcesContent":["import _ from \"lodash\"\nimport { slash, createRequireFromPath } from \"gatsby-core-utils\"\nimport fs from \"fs\"\nimport path from \"path\"\nimport crypto from \"crypto\"\nimport glob from \"glob\"\nimport { sync as existsSync } from \"fs-exists-cached\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport { silent as resolveFromSilent } from \"resolve-from\"\nimport * as semver from \"semver\"\nimport { warnOnIncompatiblePeerDependency } from \"./validate\"\nimport { store } from \"../../redux\"\nimport { createNodeId } from \"../../utils/create-node-id\"\nimport {\n IPluginInfo,\n PluginRef,\n IPluginRefObject,\n IPluginRefOptions,\n ISiteConfig,\n} from \"./types\"\nimport { PackageJson } from \"../../..\"\n\nconst GATSBY_CLOUD_PLUGIN_NAME = `gatsby-plugin-gatsby-cloud`\nconst TYPESCRIPT_PLUGIN_NAME = `gatsby-plugin-typescript`\n\nfunction createFileContentHash(root: string, globPattern: string): string {\n const hash = crypto.createHash(`md5`)\n const files = glob.sync(`${root}/${globPattern}`, { nodir: true })\n\n files.forEach(filepath => {\n hash.update(fs.readFileSync(filepath))\n })\n\n return hash.digest(`hex`)\n}\n\n/**\n * Make sure key is unique to plugin options. E.g. there could\n * be multiple source-filesystem plugins, with different names\n * (docs, blogs).\n *\n * @param name Name of the plugin\n * @param pluginObject Object of the plugin\n */\nconst createPluginId = (\n name: string,\n pluginObject: IPluginRefObject | null = null\n): string =>\n createNodeId(\n name + (pluginObject ? JSON.stringify(pluginObject.options) : ``),\n `Plugin`\n )\n\n/**\n * @param plugin\n * This should be a plugin spec object where possible but can also be the\n * name of a plugin.\n *\n * When it is a name, it can be a name of a local plugin, the name of a plugin\n * located in node_modules, or a Gatsby internal plugin. In the last case the\n * plugin will be an absolute path.\n * @param rootDir\n * This is the project location, from which are found the plugins\n */\nexport function resolvePlugin(\n plugin: PluginRef,\n rootDir: string | null\n): IPluginInfo {\n const pluginName = _.isString(plugin) ? plugin : plugin.resolve\n\n // Respect the directory that the plugin was sourced from initially\n rootDir = (!_.isString(plugin) && plugin.parentDir) || rootDir\n\n // Only find plugins when we're not given an absolute path\n if (!existsSync(pluginName) && rootDir) {\n // Find the plugin in the local plugins folder\n const resolvedPath = slash(path.join(rootDir, `plugins/${pluginName}`))\n\n if (existsSync(resolvedPath)) {\n if (existsSync(`${resolvedPath}/package.json`)) {\n const packageJSON = JSON.parse(\n fs.readFileSync(`${resolvedPath}/package.json`, `utf-8`)\n ) as PackageJson\n const name = packageJSON.name || pluginName\n warnOnIncompatiblePeerDependency(name, packageJSON)\n\n return {\n resolve: resolvedPath,\n name,\n id: createPluginId(name),\n version:\n packageJSON.version || createFileContentHash(resolvedPath, `**`),\n }\n } else {\n // Make package.json a requirement for local plugins too\n throw new Error(`Plugin ${pluginName} requires a package.json file`)\n }\n }\n }\n\n /**\n * Here we have an absolute path to an internal plugin, or a name of a module\n * which should be located in node_modules.\n */\n try {\n const requireSource =\n rootDir !== null\n ? createRequireFromPath(`${rootDir}/:internal:`)\n : require\n\n // If the path is absolute, resolve the directory of the internal plugin,\n // otherwise resolve the directory containing the package.json\n const resolvedPath = slash(\n path.dirname(\n requireSource.resolve(\n path.isAbsolute(pluginName)\n ? pluginName\n : `${pluginName}/package.json`\n )\n )\n )\n\n const packageJSON = JSON.parse(\n fs.readFileSync(`${resolvedPath}/package.json`, `utf-8`)\n )\n warnOnIncompatiblePeerDependency(packageJSON.name, packageJSON)\n\n return {\n resolve: resolvedPath,\n id: createPluginId(packageJSON.name),\n name: packageJSON.name,\n version: packageJSON.version,\n }\n } catch (err) {\n if (process.env.gatsby_log_level === `verbose`) {\n reporter.panicOnBuild(\n `plugin \"${pluginName} threw the following error:\\n`,\n err\n )\n } else {\n reporter.panicOnBuild(\n `There was a problem loading plugin \"${pluginName}\". Perhaps you need to install its package?\\nUse --verbose to see actual error.`\n )\n }\n throw new Error(`unreachable`)\n }\n}\n\nfunction addGatsbyPluginCloudPluginWhenInstalled(\n plugins: Array<IPluginInfo>,\n processPlugin: (plugin: PluginRef) => IPluginInfo,\n rootDir: string\n): void {\n const cloudPluginLocation = resolveFromSilent(\n rootDir,\n GATSBY_CLOUD_PLUGIN_NAME\n )\n\n if (cloudPluginLocation) {\n plugins.push(\n processPlugin({\n resolve: cloudPluginLocation,\n options: {},\n })\n )\n }\n}\n\nfunction incompatibleGatsbyCloudPlugin(plugins: Array<IPluginInfo>): boolean {\n const plugin = plugins.find(\n plugin => plugin.name === GATSBY_CLOUD_PLUGIN_NAME\n )\n\n return !semver.satisfies(plugin!.version, `>=4.0.0-alpha`, {\n includePrerelease: true,\n })\n}\n\nexport function loadPlugins(\n config: ISiteConfig = {},\n rootDir: string\n): Array<IPluginInfo> {\n // Instantiate plugins.\n const plugins: Array<IPluginInfo> = []\n const configuredPluginNames = new Set()\n\n // Create fake little site with a plugin for testing this\n // w/ snapshots. Move plugin processing to its own module.\n // Also test adding to redux store.\n function processPlugin(plugin: PluginRef): IPluginInfo {\n if (_.isString(plugin)) {\n const info = resolvePlugin(plugin, rootDir)\n\n return {\n ...info,\n pluginOptions: {\n plugins: [],\n },\n }\n } else {\n plugin.options = plugin.options || {}\n\n // Throw an error if there is an \"option\" key.\n if (\n _.isEmpty(plugin.options) &&\n !_.isEmpty((plugin as { option?: unknown }).option)\n ) {\n throw new Error(\n `Plugin \"${plugin.resolve}\" has an \"option\" key in the configuration. Did you mean \"options\"?`\n )\n }\n\n // Plugins can have plugins.\n if (plugin.subPluginPaths) {\n for (const subPluginPath of plugin.subPluginPaths) {\n const segments = subPluginPath.split(`.`)\n let roots: Array<any> = [plugin.options]\n\n let pathToSwap = segments\n\n for (const segment of segments) {\n if (segment === `[]`) {\n pathToSwap = pathToSwap.slice(0, pathToSwap.length - 1)\n roots = roots.flat()\n } else {\n roots = roots.map(root => root[segment])\n }\n }\n roots = roots.flat()\n\n const processed = roots.map(processPlugin)\n _.set(plugin.options, pathToSwap, processed)\n }\n }\n\n // Add some default values for tests as we don't actually\n // want to try to load anything during tests.\n if (plugin.resolve === `___TEST___`) {\n const name = `TEST`\n\n return {\n id: createPluginId(name, plugin),\n name,\n version: `0.0.0-test`,\n pluginOptions: {\n plugins: [],\n },\n resolve: `__TEST__`,\n }\n }\n\n const info = resolvePlugin(plugin, rootDir)\n\n return {\n ...info,\n modulePath: plugin.modulePath,\n module: plugin.module,\n subPluginPaths: plugin.subPluginPaths\n ? Array.from(plugin.subPluginPaths)\n : undefined,\n id: createPluginId(info.name, plugin),\n pluginOptions: _.merge({ plugins: [] }, plugin.options),\n }\n }\n }\n\n // Add internal plugins\n const internalPlugins = [\n `../../internal-plugins/dev-404-page`,\n `../../internal-plugins/load-babel-config`,\n `../../internal-plugins/internal-data-bridge`,\n `../../internal-plugins/prod-404-500`,\n `../../internal-plugins/webpack-theme-component-shadowing`,\n `../../internal-plugins/bundle-optimisations`,\n `../../internal-plugins/functions`,\n ].filter(Boolean) as Array<string>\n internalPlugins.forEach(relPath => {\n const absPath = path.join(__dirname, relPath)\n plugins.push(processPlugin(absPath))\n })\n\n // Add plugins from the site config.\n if (config.plugins) {\n config.plugins.forEach(plugin => {\n const processedPlugin = processPlugin(plugin)\n plugins.push(processedPlugin)\n configuredPluginNames.add(processedPlugin.name)\n })\n }\n\n // the order of all of these page-creators matters. The \"last plugin wins\",\n // so the user's site comes last, and each page-creator instance has to\n // match the plugin definition order before that. This works fine for themes\n // because themes have already been added in the proper order to the plugins\n // array\n plugins.forEach(plugin => {\n plugins.push(\n processPlugin({\n resolve: require.resolve(`gatsby-plugin-page-creator`),\n options: {\n path: slash(path.join(plugin.resolve, `src/pages`)),\n pathCheck: false,\n },\n })\n )\n })\n\n if (\n _CFLAGS_.GATSBY_MAJOR === `4` &&\n configuredPluginNames.has(GATSBY_CLOUD_PLUGIN_NAME) &&\n incompatibleGatsbyCloudPlugin(plugins)\n ) {\n reporter.panic(\n `Plugin gatsby-plugin-gatsby-cloud is not compatible with your gatsby version. Please upgrade to gatsby-plugin-gatsby-cloud@next`\n )\n }\n\n if (\n !configuredPluginNames.has(GATSBY_CLOUD_PLUGIN_NAME) &&\n (process.env.GATSBY_CLOUD === `true` || process.env.GATSBY_CLOUD === `1`)\n ) {\n addGatsbyPluginCloudPluginWhenInstalled(plugins, processPlugin, rootDir)\n }\n\n // Suppor Typescript by default but allow users to override it\n if (!configuredPluginNames.has(TYPESCRIPT_PLUGIN_NAME)) {\n plugins.push(\n processPlugin({\n resolve: require.resolve(TYPESCRIPT_PLUGIN_NAME),\n options: {\n // TODO(@mxstbr): Do not hard-code these defaults but infer them from the\n // pluginOptionsSchema of gatsby-plugin-typescript\n allExtensions: false,\n isTSX: false,\n jsxPragma: `React`,\n },\n })\n )\n }\n\n // Add the site's default \"plugin\" i.e. gatsby-x files in root of site.\n plugins.push({\n resolve: slash(process.cwd()),\n id: createPluginId(`default-site-plugin`),\n name: `default-site-plugin`,\n version: createFileContentHash(process.cwd(), `gatsby-*`),\n pluginOptions: {\n plugins: [],\n },\n })\n\n const program = store.getState().program\n\n // default options for gatsby-plugin-page-creator\n let pageCreatorOptions: IPluginRefOptions | undefined = {\n path: slash(path.join(program.directory, `src/pages`)),\n pathCheck: false,\n }\n\n if (config.plugins) {\n const pageCreatorPlugin = config.plugins.find(\n (plugin): plugin is IPluginRefObject =>\n typeof plugin !== `string` &&\n plugin.resolve === `gatsby-plugin-page-creator` &&\n slash((plugin.options && plugin.options.path) || ``) ===\n slash(path.join(program.directory, `src/pages`))\n )\n if (pageCreatorPlugin) {\n // override the options if there are any user specified options\n pageCreatorOptions = pageCreatorPlugin.options\n }\n }\n\n plugins.push(\n processPlugin({\n resolve: require.resolve(`gatsby-plugin-page-creator`),\n options: pageCreatorOptions,\n })\n )\n\n return plugins\n}\n"],"file":"load.js"}
@@ -137,16 +137,13 @@ async function validatePluginsOptions(plugins, rootDir) {
137
137
  let optionsSchema = gatsbyNode.pluginOptionsSchema({
138
138
  Joi: _gatsbyPluginUtils.Joi.extend(joi => {
139
139
  return {
140
- base: joi.any(),
141
140
  type: `subPlugins`,
142
- args: (_, args) => {
143
- var _args$entry;
144
-
145
- const entry = (_args$entry = args === null || args === void 0 ? void 0 : args.entry) !== null && _args$entry !== void 0 ? _args$entry : `index`;
146
- return joi.array().items(joi.alternatives(joi.string(), joi.object({
147
- resolve: _gatsbyPluginUtils.Joi.string(),
148
- options: _gatsbyPluginUtils.Joi.object({}).unknown(true)
149
- })).custom((value, helpers) => {
141
+ base: joi.array().items(joi.alternatives(joi.string(), joi.object({
142
+ resolve: _gatsbyPluginUtils.Joi.string(),
143
+ options: _gatsbyPluginUtils.Joi.object({}).unknown(true)
144
+ }))).custom((arrayValue, helpers) => {
145
+ const entry = helpers.schema._flags.entry;
146
+ return arrayValue.map(value => {
150
147
  if (typeof value === `string`) {
151
148
  value = {
152
149
  resolve: value
@@ -156,7 +153,7 @@ async function validatePluginsOptions(plugins, rootDir) {
156
153
  try {
157
154
  const resolvedPlugin = (0, _load.resolvePlugin)(value, rootDir);
158
155
 
159
- const modulePath = require.resolve(`${resolvedPlugin.resolve}/${entry}`);
156
+ const modulePath = require.resolve(`${resolvedPlugin.resolve}${entry ? `/${entry}` : ``}`);
160
157
 
161
158
  value.modulePath = modulePath;
162
159
  value.module = require(modulePath);
@@ -178,7 +175,16 @@ async function validatePluginsOptions(plugins, rootDir) {
178
175
  }
179
176
 
180
177
  return value;
181
- }, `Gatsby specific subplugin validation`)).default([]);
178
+ });
179
+ }, `Gatsby specific subplugin validation`).default([]),
180
+ args: (schema, args) => {
181
+ if (args !== null && args !== void 0 && args.entry && schema && typeof schema === `object` && schema.$_setFlag) {
182
+ return schema.$_setFlag(`entry`, args.entry, {
183
+ clone: true
184
+ });
185
+ }
186
+
187
+ return schema;
182
188
  }
183
189
  };
184
190
  })
@@ -213,7 +219,7 @@ async function validatePluginsOptions(plugins, rootDir) {
213
219
  plugin.options.plugins = subPlugins;
214
220
 
215
221
  if (subPlugins.length > 0) {
216
- subPluginPaths.add(`plugins.[]`);
222
+ subPluginPaths.add(`plugins`);
217
223
  }
218
224
 
219
225
  errors += subErrors;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/bootstrap/load-plugins/validate.ts"],"names":["getGatsbyUpgradeVersion","entries","reduce","version","entry","api","semver","gt","getBadExports","plugin","pluginAPIKeys","apis","badExports","concat","_","difference","map","e","exportName","pluginName","name","pluginVersion","getErrorContext","exportType","currentAPIs","latestAPIs","ex","gatsbyUpgradeVersion","errors","fixes","forEach","similarities","stringSimilarity","findBestMatch","isDefaultPlugin","message","push","bestMatch","rating","target","sourceMessage","length","filter","Boolean","join","handleBadExports","hasBadExports","Object","keys","find","toPairs","badItem","context","reporter","error","id","validatePluginsOptions","plugins","rootDir","newPlugins","Promise","all","gatsbyNode","resolvedPlugin","require","resolve","err","pluginOptionsSchema","subPluginPaths","Set","optionsSchema","Joi","extend","joi","base","any","type","args","array","items","alternatives","string","object","options","unknown","custom","value","helpers","modulePath","module","normalizedPath","state","path","key","index","Array","isArray","ancestors","Error","add","console","log","default","isSchema","warn","describe","append","subErrors","subPlugins","size","from","ValidationError","validationWarnings","details","validationErrors","configDir","parentDir","relative","valueString","validateConfigPluginsOptions","config","process","exit","collatePluginAPIs","flattenedPlugins","node","browser","ssr","nodeAPIs","browserAPIs","ssrAPIs","pluginNodeExports","mode","pluginBrowserExports","pluginSSRExports","intersection","handleMultipleReplaceRenderers","rendererPlugins","includes","env","NODE_ENV","ignorable","slice","messages","fp","i","skipSSR","m","warnOnIncompatiblePeerDependency","packageJSON","gatsbyPeerDependency","get","isWorker","satisfies","gatsbyVersion","includePrerelease"],"mappings":"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","sourcesContent":["import _ from \"lodash\"\nimport path from \"path\"\nimport * as semver from \"semver\"\nimport * as stringSimilarity from \"string-similarity\"\nimport { version as gatsbyVersion } from \"gatsby/package.json\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport { validateOptionsSchema, Joi } from \"gatsby-plugin-utils\"\nimport { IPluginRefObject } from \"gatsby-plugin-utils/dist/types\"\nimport { stripIndent } from \"common-tags\"\nimport { trackCli } from \"gatsby-telemetry\"\nimport { isWorker } from \"gatsby-worker\"\nimport { resolveModuleExports } from \"../resolve-module-exports\"\nimport { getLatestAPIs } from \"../../utils/get-latest-apis\"\nimport { GatsbyNode, PackageJson } from \"../../../\"\nimport {\n IPluginInfo,\n IFlattenedPlugin,\n IPluginInfoOptions,\n ISiteConfig,\n} from \"./types\"\nimport { resolvePlugin } from \"./load\"\n\ninterface IApi {\n version?: string\n}\n\nexport interface IEntry {\n exportName: string\n pluginName: string\n pluginVersion: string\n api?: IApi\n}\n\nexport type ExportType = \"node\" | \"browser\" | \"ssr\"\n\ntype IEntryMap = {\n [exportType in ExportType]: Array<IEntry>\n}\n\nexport type ICurrentAPIs = {\n [exportType in ExportType]: Array<string>\n}\n\nconst getGatsbyUpgradeVersion = (entries: ReadonlyArray<IEntry>): string =>\n entries.reduce((version, entry) => {\n if (entry.api && entry.api.version) {\n return semver.gt(entry.api.version, version || `0.0.0`)\n ? entry.api.version\n : version\n }\n return version\n }, ``)\n\n// Given a plugin object, an array of the API names it exports and an\n// array of valid API names, return an array of invalid API exports.\nfunction getBadExports(\n plugin: IPluginInfo,\n pluginAPIKeys: ReadonlyArray<string>,\n apis: ReadonlyArray<string>\n): Array<IEntry> {\n let badExports: Array<IEntry> = []\n // Discover any exports from plugins which are not \"known\"\n badExports = badExports.concat(\n _.difference(pluginAPIKeys, apis).map(e => {\n return {\n exportName: e,\n pluginName: plugin.name,\n pluginVersion: plugin.version,\n }\n })\n )\n return badExports\n}\n\nfunction getErrorContext(\n badExports: Array<IEntry>,\n exportType: ExportType,\n currentAPIs: ICurrentAPIs,\n latestAPIs: { [exportType in ExportType]: { [exportName: string]: IApi } }\n): {\n errors: Array<string>\n entries: Array<IEntry>\n exportType: ExportType\n fixes: Array<string>\n sourceMessage: string\n} {\n const entries = badExports.map(ex => {\n return {\n ...ex,\n api: latestAPIs[exportType][ex.exportName],\n }\n })\n\n const gatsbyUpgradeVersion = getGatsbyUpgradeVersion(entries)\n const errors: Array<string> = []\n const fixes = gatsbyUpgradeVersion\n ? [`npm install gatsby@^${gatsbyUpgradeVersion}`]\n : []\n\n entries.forEach(entry => {\n const similarities = stringSimilarity.findBestMatch(\n entry.exportName,\n currentAPIs[exportType]\n )\n const isDefaultPlugin = entry.pluginName == `default-site-plugin`\n\n const message = entry.api\n ? entry.api.version\n ? `was introduced in gatsby@${entry.api.version}`\n : `is not available in your version of Gatsby`\n : `is not a known API`\n\n if (isDefaultPlugin) {\n errors.push(\n `- Your local gatsby-${exportType}.js is using the API \"${entry.exportName}\" which ${message}.`\n )\n } else {\n errors.push(\n `- The plugin ${entry.pluginName}@${entry.pluginVersion} is using the API \"${entry.exportName}\" which ${message}.`\n )\n }\n\n if (similarities.bestMatch.rating > 0.5) {\n fixes.push(\n `Rename \"${entry.exportName}\" -> \"${similarities.bestMatch.target}\"`\n )\n }\n })\n\n return {\n errors,\n entries,\n exportType,\n fixes,\n // note: this is a fallback if gatsby-cli is not updated with structured error\n sourceMessage: [\n `Your plugins must export known APIs from their gatsby-node.js.`,\n ]\n .concat(errors)\n .concat(\n fixes.length > 0\n ? [`\\n`, `Some of the following may help fix the error(s):`, ...fixes]\n : []\n )\n .filter(Boolean)\n .join(`\\n`),\n }\n}\n\nexport async function handleBadExports({\n currentAPIs,\n badExports,\n}: {\n currentAPIs: ICurrentAPIs\n badExports: { [api in ExportType]: Array<IEntry> }\n}): Promise<void> {\n const hasBadExports = Object.keys(badExports).find(\n api => badExports[api].length > 0\n )\n if (hasBadExports) {\n const latestAPIs = await getLatestAPIs()\n // Output error messages for all bad exports\n _.toPairs(badExports).forEach(badItem => {\n const [exportType, entries] = badItem\n if (entries.length > 0) {\n const context = getErrorContext(\n entries,\n exportType as keyof typeof badExports,\n currentAPIs,\n latestAPIs\n )\n reporter.error({\n id: `11329`,\n context,\n })\n }\n })\n }\n}\n\nasync function validatePluginsOptions(\n plugins: Array<IPluginRefObject>,\n rootDir: string | null\n): Promise<{\n errors: number\n plugins: Array<IPluginRefObject>\n}> {\n let errors = 0\n const newPlugins = await Promise.all(\n plugins.map(async plugin => {\n let gatsbyNode\n try {\n const resolvedPlugin = resolvePlugin(plugin, rootDir)\n gatsbyNode = require(`${resolvedPlugin.resolve}/gatsby-node`)\n } catch (err) {\n gatsbyNode = {}\n }\n\n if (!gatsbyNode.pluginOptionsSchema) return plugin\n\n const subPluginPaths = new Set<string>()\n\n let optionsSchema = (\n gatsbyNode.pluginOptionsSchema as Exclude<\n GatsbyNode[\"pluginOptionsSchema\"],\n undefined\n >\n )({\n Joi: Joi.extend(joi => {\n return {\n base: joi.any(),\n type: `subPlugins`,\n args: (_, args: any): any => {\n const entry = args?.entry ?? `index`\n\n return joi\n .array()\n .items(\n joi\n .alternatives(\n joi.string(),\n joi.object({\n resolve: Joi.string(),\n options: Joi.object({}).unknown(true),\n })\n )\n .custom((value, helpers) => {\n if (typeof value === `string`) {\n value = { resolve: value }\n }\n\n try {\n const resolvedPlugin = resolvePlugin(value, rootDir)\n const modulePath = require.resolve(\n `${resolvedPlugin.resolve}/${entry}`\n )\n value.modulePath = modulePath\n value.module = require(modulePath)\n\n const normalizedPath = helpers.state.path\n .map((key, index) => {\n // if subplugin is part of an array - swap concrete index key with `[]`\n if (\n typeof key === `number` &&\n Array.isArray(\n helpers.state.ancestors[\n helpers.state.path.length - index - 1\n ]\n )\n ) {\n if (index !== helpers.state.path.length - 1) {\n throw new Error(\n `No support for arrays not at the end of path`\n )\n }\n return `[]`\n }\n\n return key\n })\n .join(`.`)\n\n subPluginPaths.add(normalizedPath)\n } catch (err) {\n console.log(err)\n }\n\n return value\n }, `Gatsby specific subplugin validation`)\n )\n .default([])\n },\n }\n }),\n })\n\n if (!Joi.isSchema(optionsSchema) || optionsSchema.type !== `object`) {\n // Validate correct usage of pluginOptionsSchema\n reporter.warn(\n `Plugin \"${plugin.resolve}\" has an invalid options schema so we cannot verify your configuration for it.`\n )\n return plugin\n }\n\n try {\n if (!optionsSchema.describe().keys.plugins) {\n // All plugins have \"plugins: []\"\" added to their options in load.ts, even if they\n // do not have subplugins. We add plugins to the schema if it does not exist already\n // to make sure they pass validation.\n optionsSchema = optionsSchema.append({\n plugins: Joi.array().length(0),\n })\n }\n\n plugin.options = await validateOptionsSchema(\n optionsSchema,\n (plugin.options as IPluginInfoOptions) || {}\n )\n\n if (plugin.options?.plugins) {\n const { errors: subErrors, plugins: subPlugins } =\n await validatePluginsOptions(\n plugin.options.plugins as Array<IPluginRefObject>,\n rootDir\n )\n plugin.options.plugins = subPlugins\n if (subPlugins.length > 0) {\n subPluginPaths.add(`plugins.[]`)\n }\n errors += subErrors\n }\n if (subPluginPaths.size > 0) {\n plugin.subPluginPaths = Array.from(subPluginPaths)\n }\n } catch (error) {\n if (error instanceof Joi.ValidationError) {\n // Show a small warning on unknown options rather than erroring\n const validationWarnings = error.details.filter(\n err => err.type === `object.unknown`\n )\n const validationErrors = error.details.filter(\n err => err.type !== `object.unknown`\n )\n\n // 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 \"\"\n // Otherwise, this will contain (and show) the relative path\n const configDir =\n (plugin.parentDir &&\n rootDir &&\n path.relative(rootDir, plugin.parentDir)) ||\n null\n if (validationErrors.length > 0) {\n reporter.error({\n id: `11331`,\n context: {\n configDir,\n validationErrors,\n pluginName: plugin.resolve,\n },\n })\n errors++\n }\n\n if (validationWarnings.length > 0) {\n reporter.warn(\n stripIndent(`\n Warning: there are unknown plugin options for \"${\n plugin.resolve\n }\"${\n configDir ? `, configured by ${configDir}` : ``\n }: ${validationWarnings\n .map(error => error.path.join(`.`))\n .join(`, `)}\n Please open an issue at ghub.io/${\n plugin.resolve\n } if you believe this option is valid.\n `)\n )\n trackCli(`UNKNOWN_PLUGIN_OPTION`, {\n name: plugin.resolve,\n valueString: validationWarnings\n .map(error => error.path.join(`.`))\n .join(`, `),\n })\n // We do not increment errors++ here as we do not want to process.exit if there are only warnings\n }\n\n return plugin\n }\n\n throw error\n }\n\n return plugin\n })\n )\n return { errors, plugins: newPlugins }\n}\n\nexport async function validateConfigPluginsOptions(\n config: ISiteConfig = {},\n rootDir: string | null\n): Promise<void> {\n if (!config.plugins) return\n\n const { errors, plugins } = await validatePluginsOptions(\n config.plugins,\n rootDir\n )\n\n config.plugins = plugins\n\n if (errors > 0) {\n process.exit(1)\n }\n}\n\n/**\n * Identify which APIs each plugin exports\n */\nexport function collatePluginAPIs({\n currentAPIs,\n flattenedPlugins,\n}: {\n currentAPIs: ICurrentAPIs\n flattenedPlugins: Array<IPluginInfo & Partial<IFlattenedPlugin>>\n}): { flattenedPlugins: Array<IFlattenedPlugin>; badExports: IEntryMap } {\n // Get a list of bad exports\n const badExports: IEntryMap = {\n node: [],\n browser: [],\n ssr: [],\n }\n\n flattenedPlugins.forEach(plugin => {\n plugin.nodeAPIs = []\n plugin.browserAPIs = []\n plugin.ssrAPIs = []\n\n // Discover which APIs this plugin implements and store an array against\n // the plugin node itself *and* in an API to plugins map for faster lookups\n // later.\n const pluginNodeExports = resolveModuleExports(\n `${plugin.resolve}/gatsby-node`,\n {\n mode: `require`,\n }\n )\n const pluginBrowserExports = resolveModuleExports(\n `${plugin.resolve}/gatsby-browser`\n )\n const pluginSSRExports = resolveModuleExports(\n `${plugin.resolve}/gatsby-ssr`\n )\n\n if (pluginNodeExports.length > 0) {\n plugin.nodeAPIs = _.intersection(pluginNodeExports, currentAPIs.node)\n badExports.node = badExports.node.concat(\n getBadExports(plugin, pluginNodeExports, currentAPIs.node)\n ) // Collate any bad exports\n }\n\n if (pluginBrowserExports.length > 0) {\n plugin.browserAPIs = _.intersection(\n pluginBrowserExports,\n currentAPIs.browser\n )\n badExports.browser = badExports.browser.concat(\n getBadExports(plugin, pluginBrowserExports, currentAPIs.browser)\n ) // Collate any bad exports\n }\n\n if (pluginSSRExports.length > 0) {\n plugin.ssrAPIs = _.intersection(pluginSSRExports, currentAPIs.ssr)\n badExports.ssr = badExports.ssr.concat(\n getBadExports(plugin, pluginSSRExports, currentAPIs.ssr)\n ) // Collate any bad exports\n }\n })\n\n return {\n flattenedPlugins: flattenedPlugins as Array<IFlattenedPlugin>,\n badExports,\n }\n}\n\nexport const handleMultipleReplaceRenderers = ({\n flattenedPlugins,\n}: {\n flattenedPlugins: Array<IFlattenedPlugin>\n}): Array<IFlattenedPlugin> => {\n // multiple replaceRenderers may cause problems at build time\n const rendererPlugins = flattenedPlugins\n .filter(plugin => plugin.ssrAPIs.includes(`replaceRenderer`))\n .map(plugin => plugin.name)\n if (rendererPlugins.length > 1) {\n if (rendererPlugins.includes(`default-site-plugin`)) {\n reporter.warn(`replaceRenderer API found in these plugins:`)\n reporter.warn(rendererPlugins.join(`, `))\n reporter.warn(\n `This might be an error, see: https://www.gatsbyjs.org/docs/debugging-replace-renderer-api/`\n )\n } else {\n console.log(``)\n reporter.error(\n `Gatsby's replaceRenderer API is implemented by multiple plugins:`\n )\n reporter.error(rendererPlugins.join(`, `))\n reporter.error(`This will break your build`)\n reporter.error(\n `See: https://www.gatsbyjs.org/docs/debugging-replace-renderer-api/`\n )\n if (process.env.NODE_ENV === `production`) process.exit(1)\n }\n\n // Now update plugin list so only final replaceRenderer will run\n const ignorable = rendererPlugins.slice(0, -1)\n\n // For each plugin in ignorable, set a skipSSR flag to true\n // This prevents apiRunnerSSR() from attempting to run it later\n const messages: Array<string> = []\n flattenedPlugins.forEach((fp, i) => {\n if (ignorable.includes(fp.name)) {\n messages.push(\n `Duplicate replaceRenderer found, skipping gatsby-ssr.js for plugin: ${fp.name}`\n )\n flattenedPlugins[i].skipSSR = true\n }\n })\n if (messages.length > 0) {\n console.log(``)\n messages.forEach(m => reporter.warn(m))\n console.log(``)\n }\n }\n\n return flattenedPlugins\n}\n\nexport function warnOnIncompatiblePeerDependency(\n name: string,\n packageJSON: PackageJson\n): void {\n // Note: In the future the peer dependency should be enforced for all plugins.\n const gatsbyPeerDependency = _.get(packageJSON, `peerDependencies.gatsby`)\n if (\n !isWorker &&\n gatsbyPeerDependency &&\n !semver.satisfies(gatsbyVersion, gatsbyPeerDependency, {\n includePrerelease: true,\n })\n ) {\n reporter.warn(\n `Plugin ${name} is not compatible with your gatsby version ${gatsbyVersion} - It requires gatsby@${gatsbyPeerDependency}`\n )\n }\n}\n"],"file":"validate.js"}
1
+ {"version":3,"sources":["../../../src/bootstrap/load-plugins/validate.ts"],"names":["getGatsbyUpgradeVersion","entries","reduce","version","entry","api","semver","gt","getBadExports","plugin","pluginAPIKeys","apis","badExports","concat","_","difference","map","e","exportName","pluginName","name","pluginVersion","getErrorContext","exportType","currentAPIs","latestAPIs","ex","gatsbyUpgradeVersion","errors","fixes","forEach","similarities","stringSimilarity","findBestMatch","isDefaultPlugin","message","push","bestMatch","rating","target","sourceMessage","length","filter","Boolean","join","handleBadExports","hasBadExports","Object","keys","find","toPairs","badItem","context","reporter","error","id","validatePluginsOptions","plugins","rootDir","newPlugins","Promise","all","gatsbyNode","resolvedPlugin","require","resolve","err","pluginOptionsSchema","subPluginPaths","Set","optionsSchema","Joi","extend","joi","type","base","array","items","alternatives","string","object","options","unknown","custom","arrayValue","helpers","schema","_flags","value","modulePath","module","normalizedPath","state","path","key","index","Array","isArray","ancestors","Error","add","console","log","default","args","$_setFlag","clone","isSchema","warn","describe","append","subErrors","subPlugins","size","from","ValidationError","validationWarnings","details","validationErrors","configDir","parentDir","relative","valueString","validateConfigPluginsOptions","config","process","exit","collatePluginAPIs","flattenedPlugins","node","browser","ssr","nodeAPIs","browserAPIs","ssrAPIs","pluginNodeExports","mode","pluginBrowserExports","pluginSSRExports","intersection","handleMultipleReplaceRenderers","rendererPlugins","includes","env","NODE_ENV","ignorable","slice","messages","fp","i","skipSSR","m","warnOnIncompatiblePeerDependency","packageJSON","gatsbyPeerDependency","get","isWorker","satisfies","gatsbyVersion","includePrerelease"],"mappings":"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","sourcesContent":["import _ from \"lodash\"\nimport path from \"path\"\nimport * as semver from \"semver\"\nimport * as stringSimilarity from \"string-similarity\"\nimport { version as gatsbyVersion } from \"gatsby/package.json\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport { validateOptionsSchema, Joi } from \"gatsby-plugin-utils\"\nimport { IPluginRefObject } from \"gatsby-plugin-utils/dist/types\"\nimport { stripIndent } from \"common-tags\"\nimport { trackCli } from \"gatsby-telemetry\"\nimport { isWorker } from \"gatsby-worker\"\nimport { resolveModuleExports } from \"../resolve-module-exports\"\nimport { getLatestAPIs } from \"../../utils/get-latest-apis\"\nimport { GatsbyNode, PackageJson } from \"../../../\"\nimport {\n IPluginInfo,\n IFlattenedPlugin,\n IPluginInfoOptions,\n ISiteConfig,\n} from \"./types\"\nimport { resolvePlugin } from \"./load\"\n\ninterface IApi {\n version?: string\n}\n\nexport interface IEntry {\n exportName: string\n pluginName: string\n pluginVersion: string\n api?: IApi\n}\n\nexport type ExportType = \"node\" | \"browser\" | \"ssr\"\n\ntype IEntryMap = {\n [exportType in ExportType]: Array<IEntry>\n}\n\nexport type ICurrentAPIs = {\n [exportType in ExportType]: Array<string>\n}\n\nconst getGatsbyUpgradeVersion = (entries: ReadonlyArray<IEntry>): string =>\n entries.reduce((version, entry) => {\n if (entry.api && entry.api.version) {\n return semver.gt(entry.api.version, version || `0.0.0`)\n ? entry.api.version\n : version\n }\n return version\n }, ``)\n\n// Given a plugin object, an array of the API names it exports and an\n// array of valid API names, return an array of invalid API exports.\nfunction getBadExports(\n plugin: IPluginInfo,\n pluginAPIKeys: ReadonlyArray<string>,\n apis: ReadonlyArray<string>\n): Array<IEntry> {\n let badExports: Array<IEntry> = []\n // Discover any exports from plugins which are not \"known\"\n badExports = badExports.concat(\n _.difference(pluginAPIKeys, apis).map(e => {\n return {\n exportName: e,\n pluginName: plugin.name,\n pluginVersion: plugin.version,\n }\n })\n )\n return badExports\n}\n\nfunction getErrorContext(\n badExports: Array<IEntry>,\n exportType: ExportType,\n currentAPIs: ICurrentAPIs,\n latestAPIs: { [exportType in ExportType]: { [exportName: string]: IApi } }\n): {\n errors: Array<string>\n entries: Array<IEntry>\n exportType: ExportType\n fixes: Array<string>\n sourceMessage: string\n} {\n const entries = badExports.map(ex => {\n return {\n ...ex,\n api: latestAPIs[exportType][ex.exportName],\n }\n })\n\n const gatsbyUpgradeVersion = getGatsbyUpgradeVersion(entries)\n const errors: Array<string> = []\n const fixes = gatsbyUpgradeVersion\n ? [`npm install gatsby@^${gatsbyUpgradeVersion}`]\n : []\n\n entries.forEach(entry => {\n const similarities = stringSimilarity.findBestMatch(\n entry.exportName,\n currentAPIs[exportType]\n )\n const isDefaultPlugin = entry.pluginName == `default-site-plugin`\n\n const message = entry.api\n ? entry.api.version\n ? `was introduced in gatsby@${entry.api.version}`\n : `is not available in your version of Gatsby`\n : `is not a known API`\n\n if (isDefaultPlugin) {\n errors.push(\n `- Your local gatsby-${exportType}.js is using the API \"${entry.exportName}\" which ${message}.`\n )\n } else {\n errors.push(\n `- The plugin ${entry.pluginName}@${entry.pluginVersion} is using the API \"${entry.exportName}\" which ${message}.`\n )\n }\n\n if (similarities.bestMatch.rating > 0.5) {\n fixes.push(\n `Rename \"${entry.exportName}\" -> \"${similarities.bestMatch.target}\"`\n )\n }\n })\n\n return {\n errors,\n entries,\n exportType,\n fixes,\n // note: this is a fallback if gatsby-cli is not updated with structured error\n sourceMessage: [\n `Your plugins must export known APIs from their gatsby-node.js.`,\n ]\n .concat(errors)\n .concat(\n fixes.length > 0\n ? [`\\n`, `Some of the following may help fix the error(s):`, ...fixes]\n : []\n )\n .filter(Boolean)\n .join(`\\n`),\n }\n}\n\nexport async function handleBadExports({\n currentAPIs,\n badExports,\n}: {\n currentAPIs: ICurrentAPIs\n badExports: { [api in ExportType]: Array<IEntry> }\n}): Promise<void> {\n const hasBadExports = Object.keys(badExports).find(\n api => badExports[api].length > 0\n )\n if (hasBadExports) {\n const latestAPIs = await getLatestAPIs()\n // Output error messages for all bad exports\n _.toPairs(badExports).forEach(badItem => {\n const [exportType, entries] = badItem\n if (entries.length > 0) {\n const context = getErrorContext(\n entries,\n exportType as keyof typeof badExports,\n currentAPIs,\n latestAPIs\n )\n reporter.error({\n id: `11329`,\n context,\n })\n }\n })\n }\n}\n\nasync function validatePluginsOptions(\n plugins: Array<IPluginRefObject>,\n rootDir: string | null\n): Promise<{\n errors: number\n plugins: Array<IPluginRefObject>\n}> {\n let errors = 0\n const newPlugins = await Promise.all(\n plugins.map(async plugin => {\n let gatsbyNode\n try {\n const resolvedPlugin = resolvePlugin(plugin, rootDir)\n gatsbyNode = require(`${resolvedPlugin.resolve}/gatsby-node`)\n } catch (err) {\n gatsbyNode = {}\n }\n\n if (!gatsbyNode.pluginOptionsSchema) return plugin\n\n const subPluginPaths = new Set<string>()\n\n let optionsSchema = (\n gatsbyNode.pluginOptionsSchema as Exclude<\n GatsbyNode[\"pluginOptionsSchema\"],\n undefined\n >\n )({\n Joi: Joi.extend(joi => {\n return {\n type: `subPlugins`,\n base: joi\n .array()\n .items(\n joi.alternatives(\n joi.string(),\n joi.object({\n resolve: Joi.string(),\n options: Joi.object({}).unknown(true),\n })\n )\n )\n .custom((arrayValue, helpers) => {\n const entry = helpers.schema._flags.entry\n return arrayValue.map(value => {\n if (typeof value === `string`) {\n value = { resolve: value }\n }\n\n try {\n const resolvedPlugin = resolvePlugin(value, rootDir)\n const modulePath = require.resolve(\n `${resolvedPlugin.resolve}${entry ? `/${entry}` : ``}`\n )\n value.modulePath = modulePath\n value.module = require(modulePath)\n\n const normalizedPath = helpers.state.path\n .map((key, index) => {\n // if subplugin is part of an array - swap concrete index key with `[]`\n if (\n typeof key === `number` &&\n Array.isArray(\n helpers.state.ancestors[\n helpers.state.path.length - index - 1\n ]\n )\n ) {\n if (index !== helpers.state.path.length - 1) {\n throw new Error(\n `No support for arrays not at the end of path`\n )\n }\n return `[]`\n }\n\n return key\n })\n .join(`.`)\n\n subPluginPaths.add(normalizedPath)\n } catch (err) {\n console.log(err)\n }\n\n return value\n })\n }, `Gatsby specific subplugin validation`)\n .default([]),\n args: (schema: any, args: any): any => {\n if (\n args?.entry &&\n schema &&\n typeof schema === `object` &&\n schema.$_setFlag\n ) {\n return schema.$_setFlag(`entry`, args.entry, { clone: true })\n }\n return schema\n },\n }\n }),\n })\n\n if (!Joi.isSchema(optionsSchema) || optionsSchema.type !== `object`) {\n // Validate correct usage of pluginOptionsSchema\n reporter.warn(\n `Plugin \"${plugin.resolve}\" has an invalid options schema so we cannot verify your configuration for it.`\n )\n return plugin\n }\n\n try {\n if (!optionsSchema.describe().keys.plugins) {\n // All plugins have \"plugins: []\"\" added to their options in load.ts, even if they\n // do not have subplugins. We add plugins to the schema if it does not exist already\n // to make sure they pass validation.\n optionsSchema = optionsSchema.append({\n plugins: Joi.array().length(0),\n })\n }\n\n plugin.options = await validateOptionsSchema(\n optionsSchema,\n (plugin.options as IPluginInfoOptions) || {}\n )\n\n if (plugin.options?.plugins) {\n const { errors: subErrors, plugins: subPlugins } =\n await validatePluginsOptions(\n plugin.options.plugins as Array<IPluginRefObject>,\n rootDir\n )\n plugin.options.plugins = subPlugins\n if (subPlugins.length > 0) {\n subPluginPaths.add(`plugins`)\n }\n errors += subErrors\n }\n if (subPluginPaths.size > 0) {\n plugin.subPluginPaths = Array.from(subPluginPaths)\n }\n } catch (error) {\n if (error instanceof Joi.ValidationError) {\n // Show a small warning on unknown options rather than erroring\n const validationWarnings = error.details.filter(\n err => err.type === `object.unknown`\n )\n const validationErrors = error.details.filter(\n err => err.type !== `object.unknown`\n )\n\n // 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 \"\"\n // Otherwise, this will contain (and show) the relative path\n const configDir =\n (plugin.parentDir &&\n rootDir &&\n path.relative(rootDir, plugin.parentDir)) ||\n null\n if (validationErrors.length > 0) {\n reporter.error({\n id: `11331`,\n context: {\n configDir,\n validationErrors,\n pluginName: plugin.resolve,\n },\n })\n errors++\n }\n\n if (validationWarnings.length > 0) {\n reporter.warn(\n stripIndent(`\n Warning: there are unknown plugin options for \"${\n plugin.resolve\n }\"${\n configDir ? `, configured by ${configDir}` : ``\n }: ${validationWarnings\n .map(error => error.path.join(`.`))\n .join(`, `)}\n Please open an issue at ghub.io/${\n plugin.resolve\n } if you believe this option is valid.\n `)\n )\n trackCli(`UNKNOWN_PLUGIN_OPTION`, {\n name: plugin.resolve,\n valueString: validationWarnings\n .map(error => error.path.join(`.`))\n .join(`, `),\n })\n // We do not increment errors++ here as we do not want to process.exit if there are only warnings\n }\n\n return plugin\n }\n\n throw error\n }\n\n return plugin\n })\n )\n return { errors, plugins: newPlugins }\n}\n\nexport async function validateConfigPluginsOptions(\n config: ISiteConfig = {},\n rootDir: string | null\n): Promise<void> {\n if (!config.plugins) return\n\n const { errors, plugins } = await validatePluginsOptions(\n config.plugins,\n rootDir\n )\n\n config.plugins = plugins\n\n if (errors > 0) {\n process.exit(1)\n }\n}\n\n/**\n * Identify which APIs each plugin exports\n */\nexport function collatePluginAPIs({\n currentAPIs,\n flattenedPlugins,\n}: {\n currentAPIs: ICurrentAPIs\n flattenedPlugins: Array<IPluginInfo & Partial<IFlattenedPlugin>>\n}): { flattenedPlugins: Array<IFlattenedPlugin>; badExports: IEntryMap } {\n // Get a list of bad exports\n const badExports: IEntryMap = {\n node: [],\n browser: [],\n ssr: [],\n }\n\n flattenedPlugins.forEach(plugin => {\n plugin.nodeAPIs = []\n plugin.browserAPIs = []\n plugin.ssrAPIs = []\n\n // Discover which APIs this plugin implements and store an array against\n // the plugin node itself *and* in an API to plugins map for faster lookups\n // later.\n const pluginNodeExports = resolveModuleExports(\n `${plugin.resolve}/gatsby-node`,\n {\n mode: `require`,\n }\n )\n const pluginBrowserExports = resolveModuleExports(\n `${plugin.resolve}/gatsby-browser`\n )\n const pluginSSRExports = resolveModuleExports(\n `${plugin.resolve}/gatsby-ssr`\n )\n\n if (pluginNodeExports.length > 0) {\n plugin.nodeAPIs = _.intersection(pluginNodeExports, currentAPIs.node)\n badExports.node = badExports.node.concat(\n getBadExports(plugin, pluginNodeExports, currentAPIs.node)\n ) // Collate any bad exports\n }\n\n if (pluginBrowserExports.length > 0) {\n plugin.browserAPIs = _.intersection(\n pluginBrowserExports,\n currentAPIs.browser\n )\n badExports.browser = badExports.browser.concat(\n getBadExports(plugin, pluginBrowserExports, currentAPIs.browser)\n ) // Collate any bad exports\n }\n\n if (pluginSSRExports.length > 0) {\n plugin.ssrAPIs = _.intersection(pluginSSRExports, currentAPIs.ssr)\n badExports.ssr = badExports.ssr.concat(\n getBadExports(plugin, pluginSSRExports, currentAPIs.ssr)\n ) // Collate any bad exports\n }\n })\n\n return {\n flattenedPlugins: flattenedPlugins as Array<IFlattenedPlugin>,\n badExports,\n }\n}\n\nexport const handleMultipleReplaceRenderers = ({\n flattenedPlugins,\n}: {\n flattenedPlugins: Array<IFlattenedPlugin>\n}): Array<IFlattenedPlugin> => {\n // multiple replaceRenderers may cause problems at build time\n const rendererPlugins = flattenedPlugins\n .filter(plugin => plugin.ssrAPIs.includes(`replaceRenderer`))\n .map(plugin => plugin.name)\n if (rendererPlugins.length > 1) {\n if (rendererPlugins.includes(`default-site-plugin`)) {\n reporter.warn(`replaceRenderer API found in these plugins:`)\n reporter.warn(rendererPlugins.join(`, `))\n reporter.warn(\n `This might be an error, see: https://www.gatsbyjs.org/docs/debugging-replace-renderer-api/`\n )\n } else {\n console.log(``)\n reporter.error(\n `Gatsby's replaceRenderer API is implemented by multiple plugins:`\n )\n reporter.error(rendererPlugins.join(`, `))\n reporter.error(`This will break your build`)\n reporter.error(\n `See: https://www.gatsbyjs.org/docs/debugging-replace-renderer-api/`\n )\n if (process.env.NODE_ENV === `production`) process.exit(1)\n }\n\n // Now update plugin list so only final replaceRenderer will run\n const ignorable = rendererPlugins.slice(0, -1)\n\n // For each plugin in ignorable, set a skipSSR flag to true\n // This prevents apiRunnerSSR() from attempting to run it later\n const messages: Array<string> = []\n flattenedPlugins.forEach((fp, i) => {\n if (ignorable.includes(fp.name)) {\n messages.push(\n `Duplicate replaceRenderer found, skipping gatsby-ssr.js for plugin: ${fp.name}`\n )\n flattenedPlugins[i].skipSSR = true\n }\n })\n if (messages.length > 0) {\n console.log(``)\n messages.forEach(m => reporter.warn(m))\n console.log(``)\n }\n }\n\n return flattenedPlugins\n}\n\nexport function warnOnIncompatiblePeerDependency(\n name: string,\n packageJSON: PackageJson\n): void {\n // Note: In the future the peer dependency should be enforced for all plugins.\n const gatsbyPeerDependency = _.get(packageJSON, `peerDependencies.gatsby`)\n if (\n !isWorker &&\n gatsbyPeerDependency &&\n !semver.satisfies(gatsbyVersion, gatsbyPeerDependency, {\n includePrerelease: true,\n })\n ) {\n reporter.warn(\n `Plugin ${name} is not compatible with your gatsby version ${gatsbyVersion} - It requires gatsby@${gatsbyPeerDependency}`\n )\n }\n}\n"],"file":"validate.js"}
@@ -127,6 +127,7 @@ function getSubpluginsByPluginPath(parentPlugin, path) {
127
127
  }
128
128
  }
129
129
 
130
+ roots = roots.flat();
130
131
  return roots;
131
132
  }
132
133
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schema/graphql-engine/print-plugins.ts"],"names":["schemaCustomizationAPIs","Set","excludePlugins","includePlugins","schemaCustomizationPluginsPath","process","cwd","printQueryEnginePlugins","fs","remove","e","writeFile","renderQueryEnginePlugins","flattenedPlugins","store","getState","usedPlugins","filter","p","has","name","nodeAPIs","some","api","usedSubPlugins","findSubPlugins","render","relativePluginPath","resolve","path","relative","dirname","uniqGatsbyNode","uniq","uniqSubPlugins","sanitizedUsedPlugins","map","plugin","pluginFilepath","subPluginPaths","undefined","pluginsWithWorkers","filterPluginsWithWorkers","subPluginModuleToImportNameMapping","Map","imports","i","importName","set","modulePath","gatsbyNodeExports","gatsbyWorkerExports","output","join","JSON","stringify","pluginOptions","_","cloneDeepWith","value","module","subPlugin","get","replace","plugins","Boolean","err","getSubpluginsByPluginPath","parentPlugin","segments","split","roots","segment","flat","root","allFlattenedPlugins","usedSubPluginResolves","flatMap","subPlugins","subPluginPath","push","Array","from","values"],"mappings":"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","sourcesContent":["/* eslint @typescript-eslint/no-unused-vars: [\"error\", { \"ignoreRestSiblings\": true }] */\nimport * as fs from \"fs-extra\"\nimport * as path from \"path\"\nimport * as _ from \"lodash\"\nimport { slash } from \"gatsby-core-utils\"\nimport { store } from \"../../redux\"\nimport { IGatsbyState } from \"../../redux/types\"\nimport { requireGatsbyPlugin } from \"../../utils/require-gatsby-plugin\"\n\nconst schemaCustomizationAPIs = new Set([\n `setFieldsOnGraphQLNodeType`,\n `createSchemaCustomization`,\n `createResolvers`,\n])\n\nconst excludePlugins = new Set([`internal-data-bridge`])\nconst includePlugins = new Set([`gatsby-plugin-sharp`])\n\n// Emit file that imports required node APIs\nconst schemaCustomizationPluginsPath =\n process.cwd() + `/.cache/query-engine-plugins.js`\n\nexport async function printQueryEnginePlugins(): Promise<void> {\n try {\n await fs.remove(schemaCustomizationPluginsPath)\n } catch (e) {\n // no-op\n }\n return await fs.writeFile(\n schemaCustomizationPluginsPath,\n renderQueryEnginePlugins()\n )\n}\n\nfunction renderQueryEnginePlugins(): string {\n const { flattenedPlugins } = store.getState()\n const usedPlugins = flattenedPlugins.filter(\n p =>\n includePlugins.has(p.name) ||\n (!excludePlugins.has(p.name) &&\n p.nodeAPIs.some(api => schemaCustomizationAPIs.has(api)))\n )\n const usedSubPlugins = findSubPlugins(usedPlugins, flattenedPlugins)\n return render(usedPlugins, usedSubPlugins)\n}\n\nfunction relativePluginPath(resolve: string): string {\n return slash(\n path.relative(path.dirname(schemaCustomizationPluginsPath), resolve)\n )\n}\n\nfunction render(\n usedPlugins: IGatsbyState[\"flattenedPlugins\"],\n usedSubPlugins: IGatsbyState[\"flattenedPlugins\"]\n): string {\n const uniqGatsbyNode = uniq(usedPlugins)\n const uniqSubPlugins = uniq(usedSubPlugins)\n\n const sanitizedUsedPlugins = usedPlugins.map(plugin => {\n // TODO: We don't support functions in pluginOptions here\n return {\n ...plugin,\n resolve: ``,\n pluginFilepath: ``,\n subPluginPaths: undefined,\n }\n })\n\n const pluginsWithWorkers = filterPluginsWithWorkers(uniqGatsbyNode)\n\n const subPluginModuleToImportNameMapping = new Map<string, string>()\n const imports: Array<string> = [\n ...uniqGatsbyNode.map(\n (plugin, i) =>\n `import * as pluginGatsbyNode${i} from \"${relativePluginPath(\n plugin.resolve\n )}/gatsby-node\"`\n ),\n ...pluginsWithWorkers.map(\n (plugin, i) =>\n `import * as pluginGatsbyWorker${i} from \"${relativePluginPath(\n plugin.resolve\n )}/gatsby-worker\"`\n ),\n ...uniqSubPlugins.map((plugin, i) => {\n const importName = `subPlugin${i}`\n subPluginModuleToImportNameMapping.set(plugin.modulePath!, importName)\n return `import * as ${importName} from \"${relativePluginPath(\n plugin.modulePath!\n )}\"`\n }),\n ]\n const gatsbyNodeExports = uniqGatsbyNode.map(\n (plugin, i) => `\"${plugin.name}\": pluginGatsbyNode${i},`\n )\n const gatsbyWorkerExports = pluginsWithWorkers.map(\n (plugin, i) => `\"${plugin.name}\": pluginGatsbyWorker${i},`\n )\n const output = `\n${imports.join(`\\n`)}\n\nexport const gatsbyNodes = {\n${gatsbyNodeExports.join(`\\n`)}\n}\n\nexport const gatsbyWorkers = {\n${gatsbyWorkerExports.join(`\\n`)}\n}\n\nexport const flattenedPlugins =\n ${JSON.stringify(\n sanitizedUsedPlugins.map(plugin => {\n return {\n ...plugin,\n pluginOptions: _.cloneDeepWith(\n plugin.pluginOptions,\n (value: any): any => {\n if (\n typeof value === `object` &&\n value !== null &&\n value.module &&\n value.modulePath\n ) {\n const { module, modulePath, ...subPlugin } = value\n return {\n ...subPlugin,\n module: `_SKIP_START_${subPluginModuleToImportNameMapping.get(\n modulePath\n )}_SKIP_END_`,\n resolve: ``,\n pluginFilepath: ``,\n }\n }\n return undefined\n }\n ),\n }\n }),\n null,\n 2\n ).replace(/\"_SKIP_START_|_SKIP_END_\"/g, ``)}\n`\n return output\n}\n\nfunction filterPluginsWithWorkers(\n plugins: IGatsbyState[\"flattenedPlugins\"]\n): IGatsbyState[\"flattenedPlugins\"] {\n return plugins.filter(plugin => {\n try {\n return Boolean(requireGatsbyPlugin(plugin, `gatsby-worker`))\n } catch (err) {\n return false\n }\n })\n}\n\ntype ArrayElement<ArrayType extends Array<unknown>> = ArrayType extends Array<\n infer ElementType\n>\n ? ElementType\n : never\n\nfunction getSubpluginsByPluginPath(\n parentPlugin: ArrayElement<IGatsbyState[\"flattenedPlugins\"]>,\n path: string\n): IGatsbyState[\"flattenedPlugins\"] {\n const segments = path.split(`.`)\n let roots: Array<any> = [parentPlugin.pluginOptions]\n\n for (const segment of segments) {\n if (segment === `[]`) {\n roots = roots.flat()\n } else {\n roots = roots.map(root => root[segment])\n }\n }\n\n return roots\n}\n\nfunction findSubPlugins(\n plugins: IGatsbyState[\"flattenedPlugins\"],\n allFlattenedPlugins: IGatsbyState[\"flattenedPlugins\"]\n): IGatsbyState[\"flattenedPlugins\"] {\n const usedSubPluginResolves = new Set<string>(\n plugins\n .flatMap(plugin => {\n if (plugin.subPluginPaths) {\n const subPlugins: IGatsbyState[\"flattenedPlugins\"] = []\n for (const subPluginPath of plugin.subPluginPaths) {\n subPlugins.push(...getSubpluginsByPluginPath(plugin, subPluginPath))\n }\n return subPlugins\n }\n\n return []\n })\n .map(plugin => plugin[`resolve`])\n .filter((p: unknown): p is string => typeof p === `string`)\n )\n return allFlattenedPlugins.filter(\n p => usedSubPluginResolves.has(p.resolve) && !!p.modulePath\n )\n}\n\nfunction uniq(\n plugins: IGatsbyState[\"flattenedPlugins\"]\n): IGatsbyState[\"flattenedPlugins\"] {\n return Array.from(new Map(plugins.map(p => [p.resolve, p])).values())\n}\n"],"file":"print-plugins.js"}
1
+ {"version":3,"sources":["../../../src/schema/graphql-engine/print-plugins.ts"],"names":["schemaCustomizationAPIs","Set","excludePlugins","includePlugins","schemaCustomizationPluginsPath","process","cwd","printQueryEnginePlugins","fs","remove","e","writeFile","renderQueryEnginePlugins","flattenedPlugins","store","getState","usedPlugins","filter","p","has","name","nodeAPIs","some","api","usedSubPlugins","findSubPlugins","render","relativePluginPath","resolve","path","relative","dirname","uniqGatsbyNode","uniq","uniqSubPlugins","sanitizedUsedPlugins","map","plugin","pluginFilepath","subPluginPaths","undefined","pluginsWithWorkers","filterPluginsWithWorkers","subPluginModuleToImportNameMapping","Map","imports","i","importName","set","modulePath","gatsbyNodeExports","gatsbyWorkerExports","output","join","JSON","stringify","pluginOptions","_","cloneDeepWith","value","module","subPlugin","get","replace","plugins","Boolean","err","getSubpluginsByPluginPath","parentPlugin","segments","split","roots","segment","flat","root","allFlattenedPlugins","usedSubPluginResolves","flatMap","subPlugins","subPluginPath","push","Array","from","values"],"mappings":"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","sourcesContent":["/* eslint @typescript-eslint/no-unused-vars: [\"error\", { \"ignoreRestSiblings\": true }] */\nimport * as fs from \"fs-extra\"\nimport * as path from \"path\"\nimport * as _ from \"lodash\"\nimport { slash } from \"gatsby-core-utils\"\nimport { store } from \"../../redux\"\nimport { IGatsbyState } from \"../../redux/types\"\nimport { requireGatsbyPlugin } from \"../../utils/require-gatsby-plugin\"\n\nconst schemaCustomizationAPIs = new Set([\n `setFieldsOnGraphQLNodeType`,\n `createSchemaCustomization`,\n `createResolvers`,\n])\n\nconst excludePlugins = new Set([`internal-data-bridge`])\nconst includePlugins = new Set([`gatsby-plugin-sharp`])\n\n// Emit file that imports required node APIs\nconst schemaCustomizationPluginsPath =\n process.cwd() + `/.cache/query-engine-plugins.js`\n\nexport async function printQueryEnginePlugins(): Promise<void> {\n try {\n await fs.remove(schemaCustomizationPluginsPath)\n } catch (e) {\n // no-op\n }\n return await fs.writeFile(\n schemaCustomizationPluginsPath,\n renderQueryEnginePlugins()\n )\n}\n\nfunction renderQueryEnginePlugins(): string {\n const { flattenedPlugins } = store.getState()\n const usedPlugins = flattenedPlugins.filter(\n p =>\n includePlugins.has(p.name) ||\n (!excludePlugins.has(p.name) &&\n p.nodeAPIs.some(api => schemaCustomizationAPIs.has(api)))\n )\n const usedSubPlugins = findSubPlugins(usedPlugins, flattenedPlugins)\n return render(usedPlugins, usedSubPlugins)\n}\n\nfunction relativePluginPath(resolve: string): string {\n return slash(\n path.relative(path.dirname(schemaCustomizationPluginsPath), resolve)\n )\n}\n\nfunction render(\n usedPlugins: IGatsbyState[\"flattenedPlugins\"],\n usedSubPlugins: IGatsbyState[\"flattenedPlugins\"]\n): string {\n const uniqGatsbyNode = uniq(usedPlugins)\n const uniqSubPlugins = uniq(usedSubPlugins)\n\n const sanitizedUsedPlugins = usedPlugins.map(plugin => {\n // TODO: We don't support functions in pluginOptions here\n return {\n ...plugin,\n resolve: ``,\n pluginFilepath: ``,\n subPluginPaths: undefined,\n }\n })\n\n const pluginsWithWorkers = filterPluginsWithWorkers(uniqGatsbyNode)\n\n const subPluginModuleToImportNameMapping = new Map<string, string>()\n const imports: Array<string> = [\n ...uniqGatsbyNode.map(\n (plugin, i) =>\n `import * as pluginGatsbyNode${i} from \"${relativePluginPath(\n plugin.resolve\n )}/gatsby-node\"`\n ),\n ...pluginsWithWorkers.map(\n (plugin, i) =>\n `import * as pluginGatsbyWorker${i} from \"${relativePluginPath(\n plugin.resolve\n )}/gatsby-worker\"`\n ),\n ...uniqSubPlugins.map((plugin, i) => {\n const importName = `subPlugin${i}`\n subPluginModuleToImportNameMapping.set(plugin.modulePath!, importName)\n return `import * as ${importName} from \"${relativePluginPath(\n plugin.modulePath!\n )}\"`\n }),\n ]\n const gatsbyNodeExports = uniqGatsbyNode.map(\n (plugin, i) => `\"${plugin.name}\": pluginGatsbyNode${i},`\n )\n const gatsbyWorkerExports = pluginsWithWorkers.map(\n (plugin, i) => `\"${plugin.name}\": pluginGatsbyWorker${i},`\n )\n const output = `\n${imports.join(`\\n`)}\n\nexport const gatsbyNodes = {\n${gatsbyNodeExports.join(`\\n`)}\n}\n\nexport const gatsbyWorkers = {\n${gatsbyWorkerExports.join(`\\n`)}\n}\n\nexport const flattenedPlugins =\n ${JSON.stringify(\n sanitizedUsedPlugins.map(plugin => {\n return {\n ...plugin,\n pluginOptions: _.cloneDeepWith(\n plugin.pluginOptions,\n (value: any): any => {\n if (\n typeof value === `object` &&\n value !== null &&\n value.module &&\n value.modulePath\n ) {\n const { module, modulePath, ...subPlugin } = value\n return {\n ...subPlugin,\n module: `_SKIP_START_${subPluginModuleToImportNameMapping.get(\n modulePath\n )}_SKIP_END_`,\n resolve: ``,\n pluginFilepath: ``,\n }\n }\n return undefined\n }\n ),\n }\n }),\n null,\n 2\n ).replace(/\"_SKIP_START_|_SKIP_END_\"/g, ``)}\n`\n return output\n}\n\nfunction filterPluginsWithWorkers(\n plugins: IGatsbyState[\"flattenedPlugins\"]\n): IGatsbyState[\"flattenedPlugins\"] {\n return plugins.filter(plugin => {\n try {\n return Boolean(requireGatsbyPlugin(plugin, `gatsby-worker`))\n } catch (err) {\n return false\n }\n })\n}\n\ntype ArrayElement<ArrayType extends Array<unknown>> = ArrayType extends Array<\n infer ElementType\n>\n ? ElementType\n : never\n\nfunction getSubpluginsByPluginPath(\n parentPlugin: ArrayElement<IGatsbyState[\"flattenedPlugins\"]>,\n path: string\n): IGatsbyState[\"flattenedPlugins\"] {\n const segments = path.split(`.`)\n let roots: Array<any> = [parentPlugin.pluginOptions]\n\n for (const segment of segments) {\n if (segment === `[]`) {\n roots = roots.flat()\n } else {\n roots = roots.map(root => root[segment])\n }\n }\n roots = roots.flat()\n\n return roots\n}\n\nfunction findSubPlugins(\n plugins: IGatsbyState[\"flattenedPlugins\"],\n allFlattenedPlugins: IGatsbyState[\"flattenedPlugins\"]\n): IGatsbyState[\"flattenedPlugins\"] {\n const usedSubPluginResolves = new Set<string>(\n plugins\n .flatMap(plugin => {\n if (plugin.subPluginPaths) {\n const subPlugins: IGatsbyState[\"flattenedPlugins\"] = []\n for (const subPluginPath of plugin.subPluginPaths) {\n subPlugins.push(...getSubpluginsByPluginPath(plugin, subPluginPath))\n }\n return subPlugins\n }\n\n return []\n })\n .map(plugin => plugin[`resolve`])\n .filter((p: unknown): p is string => typeof p === `string`)\n )\n return allFlattenedPlugins.filter(\n p => usedSubPluginResolves.has(p.resolve) && !!p.modulePath\n )\n}\n\nfunction uniq(\n plugins: IGatsbyState[\"flattenedPlugins\"]\n): IGatsbyState[\"flattenedPlugins\"] {\n return Array.from(new Map(plugins.map(p => [p.resolve, p])).values())\n}\n"],"file":"print-plugins.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gatsby",
3
3
  "description": "Blazing fast modern site generator for React",
4
- "version": "4.1.1",
4
+ "version": "4.1.2",
5
5
  "author": "Kyle Mathews <mathews.kyle@gmail.com>",
6
6
  "bin": {
7
7
  "gatsby": "./cli.js"
@@ -77,14 +77,14 @@
77
77
  "find-cache-dir": "^3.3.2",
78
78
  "fs-exists-cached": "1.0.0",
79
79
  "fs-extra": "^10.0.0",
80
- "gatsby-cli": "^4.1.0",
80
+ "gatsby-cli": "^4.1.1",
81
81
  "gatsby-core-utils": "^3.1.0",
82
82
  "gatsby-graphiql-explorer": "^2.1.0",
83
83
  "gatsby-legacy-polyfills": "^2.1.0",
84
84
  "gatsby-link": "^4.1.0",
85
- "gatsby-plugin-page-creator": "^4.1.0",
85
+ "gatsby-plugin-page-creator": "^4.1.1",
86
86
  "gatsby-plugin-typescript": "^4.1.0",
87
- "gatsby-plugin-utils": "^2.1.0",
87
+ "gatsby-plugin-utils": "^2.1.1",
88
88
  "gatsby-react-router-scroll": "^5.1.0",
89
89
  "gatsby-telemetry": "^3.1.0",
90
90
  "gatsby-worker": "^1.1.0",
@@ -258,5 +258,5 @@
258
258
  "yargs": {
259
259
  "boolean-negation": false
260
260
  },
261
- "gitHead": "95a35242ce8303b682e6453e2ba746ec5b12264e"
261
+ "gitHead": "3b06677ed9e402042bd565b1c142e6016baa9a55"
262
262
  }