gatsby 4.17.0 → 4.18.0-next.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.
Files changed (115) hide show
  1. package/cache-dir/commonjs/develop-static-entry.js +5 -5
  2. package/cache-dir/commonjs/ssr-develop-static-entry.js +42 -15
  3. package/cache-dir/ssr-develop-static-entry.js +13 -5
  4. package/dist/bootstrap/load-plugins/process-plugin.js +15 -7
  5. package/dist/bootstrap/load-plugins/process-plugin.js.map +1 -1
  6. package/dist/bootstrap/load-plugins/resolve-plugin.js +3 -3
  7. package/dist/bootstrap/load-plugins/resolve-plugin.js.map +1 -1
  8. package/dist/bootstrap/load-plugins/utils/get-api.js +5 -3
  9. package/dist/bootstrap/load-plugins/utils/get-api.js.map +1 -1
  10. package/dist/bootstrap/load-plugins/validate.js +13 -7
  11. package/dist/bootstrap/load-plugins/validate.js.map +1 -1
  12. package/dist/bootstrap/redirects-writer.js +2 -3
  13. package/dist/bootstrap/redirects-writer.js.map +1 -1
  14. package/dist/bootstrap/requires-writer.js +23 -13
  15. package/dist/bootstrap/requires-writer.js.map +1 -1
  16. package/dist/bootstrap/schema-hot-reloader.js +5 -3
  17. package/dist/bootstrap/schema-hot-reloader.js.map +1 -1
  18. package/dist/commands/build-html.d.ts +2 -5
  19. package/dist/commands/build-html.js +89 -15
  20. package/dist/commands/build-html.js.map +1 -1
  21. package/dist/datastore/common/query.js +8 -8
  22. package/dist/datastore/common/query.js.map +1 -1
  23. package/dist/datastore/in-memory/indexing.js +3 -3
  24. package/dist/datastore/in-memory/indexing.js.map +1 -1
  25. package/dist/datastore/in-memory/run-fast-filters.js +2 -2
  26. package/dist/datastore/in-memory/run-fast-filters.js.map +1 -1
  27. package/dist/internal-plugins/functions/gatsby-node.js +6 -5
  28. package/dist/internal-plugins/functions/gatsby-node.js.map +1 -1
  29. package/dist/joi-schemas/joi.js +13 -1
  30. package/dist/joi-schemas/joi.js.map +1 -1
  31. package/dist/query/graphql-errors.js +5 -3
  32. package/dist/query/graphql-errors.js.map +1 -1
  33. package/dist/query/graphql-runner.js +3 -3
  34. package/dist/query/graphql-runner.js.map +1 -1
  35. package/dist/query/index.js +2 -2
  36. package/dist/query/index.js.map +1 -1
  37. package/dist/query/query-runner.js +2 -2
  38. package/dist/query/query-runner.js.map +1 -1
  39. package/dist/redux/actions/restricted.js +2 -2
  40. package/dist/redux/actions/restricted.js.map +1 -1
  41. package/dist/redux/index.js +3 -5
  42. package/dist/redux/index.js.map +1 -1
  43. package/dist/redux/reducers/babelrc.js +7 -7
  44. package/dist/redux/reducers/babelrc.js.map +1 -1
  45. package/dist/redux/reducers/inference-metadata.js +4 -4
  46. package/dist/redux/reducers/inference-metadata.js.map +1 -1
  47. package/dist/redux/reducers/jobs.js +9 -7
  48. package/dist/redux/reducers/jobs.js.map +1 -1
  49. package/dist/redux/reducers/redirects.js +2 -2
  50. package/dist/redux/reducers/redirects.js.map +1 -1
  51. package/dist/redux/reducers/status.js +5 -3
  52. package/dist/redux/reducers/status.js.map +1 -1
  53. package/dist/redux/types.d.ts +4 -1
  54. package/dist/redux/types.js.map +1 -1
  55. package/dist/schema/graphql-engine/bundle-webpack.js +12 -9
  56. package/dist/schema/graphql-engine/bundle-webpack.js.map +1 -1
  57. package/dist/schema/graphql-engine/print-plugins.js +5 -3
  58. package/dist/schema/graphql-engine/print-plugins.js.map +1 -1
  59. package/dist/schema/infer/build-example-data.js +4 -3
  60. package/dist/schema/infer/build-example-data.js.map +1 -1
  61. package/dist/schema/infer/inference-metadata.js +4 -61
  62. package/dist/schema/infer/inference-metadata.js.map +1 -1
  63. package/dist/schema/print.js +6 -4
  64. package/dist/schema/print.js.map +1 -1
  65. package/dist/services/graphql-typegen.js +8 -2
  66. package/dist/services/graphql-typegen.js.map +1 -1
  67. package/dist/services/initialize.js +5 -3
  68. package/dist/services/initialize.js.map +1 -1
  69. package/dist/state-machines/develop/actions.js +9 -2
  70. package/dist/state-machines/develop/actions.js.map +1 -1
  71. package/dist/utils/changed-pages.js +5 -3
  72. package/dist/utils/changed-pages.js.map +1 -1
  73. package/dist/utils/dev-ssr/parse-error.d.ts +22 -0
  74. package/dist/utils/dev-ssr/parse-error.js +115 -0
  75. package/dist/utils/dev-ssr/parse-error.js.map +1 -0
  76. package/dist/utils/dev-ssr/render-dev-html-child.d.ts +13 -0
  77. package/dist/utils/dev-ssr/render-dev-html-child.js +25 -103
  78. package/dist/utils/dev-ssr/render-dev-html-child.js.map +1 -1
  79. package/dist/utils/dev-ssr/render-dev-html.d.ts +10 -10
  80. package/dist/utils/dev-ssr/render-dev-html.js +57 -32
  81. package/dist/utils/dev-ssr/render-dev-html.js.map +1 -1
  82. package/dist/utils/flags.js +4 -19
  83. package/dist/utils/flags.js.map +1 -1
  84. package/dist/utils/gatsby-dependents.js +5 -3
  85. package/dist/utils/gatsby-dependents.js.map +1 -1
  86. package/dist/utils/graphql-typegen/ts-codegen.d.ts +3 -2
  87. package/dist/utils/graphql-typegen/ts-codegen.js +5 -3
  88. package/dist/utils/graphql-typegen/ts-codegen.js.map +1 -1
  89. package/dist/utils/graphql-typegen/utils.js +3 -5
  90. package/dist/utils/graphql-typegen/utils.js.map +1 -1
  91. package/dist/utils/handle-flags.js +2 -2
  92. package/dist/utils/handle-flags.js.map +1 -1
  93. package/dist/utils/jobs/manager.js +3 -3
  94. package/dist/utils/jobs/manager.js.map +1 -1
  95. package/dist/utils/js-chunk-names.js +3 -3
  96. package/dist/utils/js-chunk-names.js.map +1 -1
  97. package/dist/utils/merge-gatsby-config.js +19 -8
  98. package/dist/utils/merge-gatsby-config.js.map +1 -1
  99. package/dist/utils/node-manifest.d.ts +2 -1
  100. package/dist/utils/node-manifest.js +24 -4
  101. package/dist/utils/node-manifest.js.map +1 -1
  102. package/dist/utils/prepare-regex.js +2 -2
  103. package/dist/utils/prepare-regex.js.map +1 -1
  104. package/dist/utils/sanitize-node.js +15 -9
  105. package/dist/utils/sanitize-node.js.map +1 -1
  106. package/dist/utils/start-server.js +34 -10
  107. package/dist/utils/start-server.js.map +1 -1
  108. package/dist/utils/webpack/plugins/static-query-mapper.js +3 -3
  109. package/dist/utils/webpack/plugins/static-query-mapper.js.map +1 -1
  110. package/dist/utils/worker/child/render-html.js +3 -3
  111. package/dist/utils/worker/child/render-html.js.map +1 -1
  112. package/dist/utils/worker/pool.js +4 -4
  113. package/dist/utils/worker/pool.js.map +1 -1
  114. package/index.d.ts +8 -7
  115. package/package.json +20 -21
@@ -6,12 +6,12 @@ exports.__esModule = true;
6
6
  exports.default = void 0;
7
7
  exports.getPageChunk = getPageChunk;
8
8
 
9
+ var _merge2 = _interopRequireDefault(require("lodash/merge"));
10
+
9
11
  var _react = _interopRequireDefault(require("react"));
10
12
 
11
13
  var _server = require("react-dom/server");
12
14
 
13
- var _lodash = require("lodash");
14
-
15
15
  var _apiRunnerSsr = require("./api-runner-ssr");
16
16
 
17
17
  var _asyncRequires = _interopRequireDefault(require("$virtual/async-requires"));
@@ -62,11 +62,11 @@ var _default = ({
62
62
  };
63
63
 
64
64
  const setHtmlAttributes = attributes => {
65
- htmlAttributes = (0, _lodash.merge)(htmlAttributes, attributes);
65
+ htmlAttributes = (0, _merge2.default)(htmlAttributes, attributes);
66
66
  };
67
67
 
68
68
  const setBodyAttributes = attributes => {
69
- bodyAttributes = (0, _lodash.merge)(bodyAttributes, attributes);
69
+ bodyAttributes = (0, _merge2.default)(bodyAttributes, attributes);
70
70
  };
71
71
 
72
72
  const setPreBodyComponents = components => {
@@ -78,7 +78,7 @@ var _default = ({
78
78
  };
79
79
 
80
80
  const setBodyProps = props => {
81
- bodyProps = (0, _lodash.merge)({}, bodyProps, props);
81
+ bodyProps = (0, _merge2.default)({}, bodyProps, props);
82
82
  };
83
83
 
84
84
  const getHeadComponents = () => headComponents;
@@ -4,6 +4,19 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
 
5
5
  exports.__esModule = true;
6
6
  exports.default = staticPage;
7
+ exports.getPageChunk = getPageChunk;
8
+
9
+ var _concat2 = _interopRequireDefault(require("lodash/concat"));
10
+
11
+ var _uniqBy2 = _interopRequireDefault(require("lodash/uniqBy"));
12
+
13
+ var _flatten2 = _interopRequireDefault(require("lodash/flatten"));
14
+
15
+ var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
16
+
17
+ var _merge2 = _interopRequireDefault(require("lodash/merge"));
18
+
19
+ var _get2 = _interopRequireDefault(require("lodash/get"));
7
20
 
8
21
  var _react = _interopRequireDefault(require("react"));
9
22
 
@@ -11,8 +24,6 @@ var _fs = _interopRequireDefault(require("fs"));
11
24
 
12
25
  var _server = require("react-dom/server");
13
26
 
14
- var _lodash = require("lodash");
15
-
16
27
  var _path = _interopRequireDefault(require("path"));
17
28
 
18
29
  var _apiRunnerSsr = require("./api-runner-ssr");
@@ -26,10 +37,13 @@ var _routeAnnouncerProps = require("./route-announcer-props");
26
37
  var _router = require("@reach/router");
27
38
 
28
39
  /* global BROWSER_ESM_ONLY */
29
- // import testRequireError from "./test-require-error"
40
+ // prefer default export if available
41
+ const preferDefault = m => m && m.default || m; // import testRequireError from "./test-require-error"
30
42
  // For some extremely mysterious reason, webpack adds the above module *after*
31
43
  // this module so that when this code runs, testRequireError is undefined.
32
44
  // So in the meantime, we'll just inline it.
45
+
46
+
33
47
  const testRequireError = (moduleName, err) => {
34
48
  const regex = new RegExp(`Error: Cannot find module\\s.${moduleName}`);
35
49
  const firstLine = err.toString().split(`\n`)[0];
@@ -62,7 +76,13 @@ try {
62
76
 
63
77
  Html = Html && Html.__esModule ? Html.default : Html;
64
78
 
65
- async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback) {
79
+ async function staticPage({
80
+ pagePath,
81
+ isClientOnlyPage,
82
+ publicDir,
83
+ error,
84
+ serverData
85
+ }) {
66
86
  let bodyHtml = ``;
67
87
  let headComponents = [/*#__PURE__*/_react.default.createElement("meta", {
68
88
  key: "environment",
@@ -92,11 +112,11 @@ async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback
92
112
  };
93
113
 
94
114
  const setHtmlAttributes = attributes => {
95
- htmlAttributes = (0, _lodash.merge)(htmlAttributes, attributes);
115
+ htmlAttributes = (0, _merge2.default)(htmlAttributes, attributes);
96
116
  };
97
117
 
98
118
  const setBodyAttributes = attributes => {
99
- bodyAttributes = (0, _lodash.merge)(bodyAttributes, attributes);
119
+ bodyAttributes = (0, _merge2.default)(bodyAttributes, attributes);
100
120
  };
101
121
 
102
122
  const setPreBodyComponents = components => {
@@ -108,7 +128,7 @@ async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback
108
128
  };
109
129
 
110
130
  const setBodyProps = props => {
111
- bodyProps = (0, _lodash.merge)({}, bodyProps, props);
131
+ bodyProps = (0, _merge2.default)({}, bodyProps, props);
112
132
  };
113
133
 
114
134
  const getHeadComponents = () => headComponents;
@@ -156,11 +176,11 @@ async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback
156
176
  const {
157
177
  componentChunkName
158
178
  } = pageData;
159
- let scriptsAndStyles = (0, _lodash.flatten)([`commons`].map(chunkKey => {
179
+ let scriptsAndStyles = (0, _flatten2.default)([`commons`].map(chunkKey => {
160
180
  const fetchKey = `assetsByChunkName[${chunkKey}]`;
161
181
  const stats = getStats(publicDir);
162
- let chunks = (0, _lodash.get)(stats, fetchKey);
163
- const namedChunkGroups = (0, _lodash.get)(stats, `namedChunkGroups`);
182
+ let chunks = (0, _get2.default)(stats, fetchKey);
183
+ const namedChunkGroups = (0, _get2.default)(stats, `namedChunkGroups`);
164
184
 
165
185
  if (!chunks) {
166
186
  return null;
@@ -184,7 +204,7 @@ async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback
184
204
 
185
205
  for (const rel in childAssets) {
186
206
  if (childAssets.hasownProperty(rel)) {
187
- chunks = (0, _lodash.concat)(chunks, childAssets[rel].map(chunk => {
207
+ chunks = (0, _concat2.default)(chunks, childAssets[rel].map(chunk => {
188
208
  return {
189
209
  rel,
190
210
  name: chunk
@@ -194,9 +214,9 @@ async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback
194
214
  }
195
215
 
196
216
  return chunks;
197
- })).filter(s => (0, _lodash.isObject)(s)).sort((s1, _s2) => s1.rel == `preload` ? -1 : 1); // given priority to preload
217
+ })).filter(s => (0, _isObject2.default)(s)).sort((s1, _s2) => s1.rel == `preload` ? -1 : 1); // given priority to preload
198
218
 
199
- scriptsAndStyles = (0, _lodash.uniqBy)(scriptsAndStyles, item => item.name);
219
+ scriptsAndStyles = (0, _uniqBy2.default)(scriptsAndStyles, item => item.name);
200
220
  const styles = scriptsAndStyles.filter(style => style.name && style.name.endsWith(`.css`));
201
221
  styles.slice(0).reverse().forEach(style => {
202
222
  headComponents.unshift( /*#__PURE__*/_react.default.createElement("link", {
@@ -214,6 +234,7 @@ async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback
214
234
 
215
235
  const props = { ...this.props,
216
236
  ...pageData.result,
237
+ serverData,
217
238
  params: { ...(0, _findPath.grabMatchParams)(this.props.location.pathname),
218
239
  ...(((_pageData$result = pageData.result) === null || _pageData$result === void 0 ? void 0 : (_pageData$result$page = _pageData$result.pageContext) === null || _pageData$result$page === void 0 ? void 0 : _pageData$result$page.__params) || {})
219
240
  }
@@ -221,7 +242,7 @@ async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback
221
242
  let pageElement;
222
243
 
223
244
  if (_ssrSyncRequires.default.ssrComponents[componentChunkName] && !isClientOnlyPage) {
224
- pageElement = /*#__PURE__*/_react.default.createElement(_ssrSyncRequires.default.ssrComponents[componentChunkName], props);
245
+ pageElement = /*#__PURE__*/_react.default.createElement(preferDefault(_ssrSyncRequires.default.ssrComponents[componentChunkName]), props);
225
246
  } else {
226
247
  // If this is a client-only page or the pageComponent didn't finish
227
248
  // compiling yet, just render an empty component.
@@ -334,5 +355,11 @@ async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback
334
355
 
335
356
  let htmlStr = (0, _server.renderToStaticMarkup)(htmlElement);
336
357
  htmlStr = `<!DOCTYPE html>${htmlStr}`;
337
- callback(null, htmlStr);
358
+ return htmlStr;
359
+ }
360
+
361
+ function getPageChunk({
362
+ componentChunkName
363
+ }) {
364
+ return _ssrSyncRequires.default.ssrComponents[componentChunkName];
338
365
  }
@@ -11,6 +11,9 @@ import syncRequires from "$virtual/ssr-sync-requires"
11
11
  import { RouteAnnouncerProps } from "./route-announcer-props"
12
12
  import { ServerLocation, Router, isRedirect } from "@reach/router"
13
13
 
14
+ // prefer default export if available
15
+ const preferDefault = m => (m && m.default) || m
16
+
14
17
  // import testRequireError from "./test-require-error"
15
18
  // For some extremely mysterious reason, webpack adds the above module *after*
16
19
  // this module so that when this code runs, testRequireError is undefined.
@@ -48,13 +51,13 @@ try {
48
51
 
49
52
  Html = Html && Html.__esModule ? Html.default : Html
50
53
 
51
- export default async function staticPage(
54
+ export default async function staticPage({
52
55
  pagePath,
53
56
  isClientOnlyPage,
54
57
  publicDir,
55
58
  error,
56
- callback
57
- ) {
59
+ serverData,
60
+ }) {
58
61
  let bodyHtml = ``
59
62
  let headComponents = [
60
63
  <meta key="environment" name="note" content="environment=development" />,
@@ -225,6 +228,7 @@ export default async function staticPage(
225
228
  const props = {
226
229
  ...this.props,
227
230
  ...pageData.result,
231
+ serverData,
228
232
  params: {
229
233
  ...grabMatchParams(this.props.location.pathname),
230
234
  ...(pageData.result?.pageContext?.__params || {}),
@@ -237,7 +241,7 @@ export default async function staticPage(
237
241
  !isClientOnlyPage
238
242
  ) {
239
243
  pageElement = React.createElement(
240
- syncRequires.ssrComponents[componentChunkName],
244
+ preferDefault(syncRequires.ssrComponents[componentChunkName]),
241
245
  props
242
246
  )
243
247
  } else {
@@ -348,5 +352,9 @@ export default async function staticPage(
348
352
  let htmlStr = renderToStaticMarkup(htmlElement)
349
353
  htmlStr = `<!DOCTYPE html>${htmlStr}`
350
354
 
351
- callback(null, htmlStr)
355
+ return htmlStr
356
+ }
357
+
358
+ export function getPageChunk({ componentChunkName }) {
359
+ return syncRequires.ssrComponents[componentChunkName]
352
360
  }
@@ -1,19 +1,27 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  exports.__esModule = true;
4
6
  exports.processPlugin = processPlugin;
5
7
 
8
+ var _merge2 = _interopRequireDefault(require("lodash/merge"));
9
+
10
+ var _set2 = _interopRequireDefault(require("lodash/set"));
11
+
12
+ var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
13
+
14
+ var _isString2 = _interopRequireDefault(require("lodash/isString"));
15
+
6
16
  var _createId = require("./utils/create-id");
7
17
 
8
18
  var _resolvePlugin = require("./resolve-plugin");
9
19
 
10
- var _lodash = require("lodash");
11
-
12
20
  function processPlugin(plugin, rootDir) {
13
21
  // Respect the directory that the plugin was sourced from initially
14
- rootDir = !(0, _lodash.isString)(plugin) && plugin.parentDir || rootDir;
22
+ rootDir = !(0, _isString2.default)(plugin) && plugin.parentDir || rootDir;
15
23
 
16
- if ((0, _lodash.isString)(plugin)) {
24
+ if ((0, _isString2.default)(plugin)) {
17
25
  const info = (0, _resolvePlugin.resolvePlugin)(plugin, rootDir);
18
26
  return { ...info,
19
27
  pluginOptions: {
@@ -24,7 +32,7 @@ function processPlugin(plugin, rootDir) {
24
32
 
25
33
  plugin.options = plugin.options || {}; // Throw an error if there is an "option" key.
26
34
 
27
- if ((0, _lodash.isEmpty)(plugin.options) && !(0, _lodash.isEmpty)(plugin.option)) {
35
+ if ((0, _isEmpty2.default)(plugin.options) && !(0, _isEmpty2.default)(plugin.option)) {
28
36
  throw new Error(`Plugin "${plugin.resolve}" has an "option" key in the configuration. Did you mean "options"?`);
29
37
  } // Plugins can have plugins.
30
38
 
@@ -52,7 +60,7 @@ function processPlugin(plugin, rootDir) {
52
60
  processed.push(result);
53
61
  }
54
62
 
55
- (0, _lodash.set)(plugin.options, pathToSwap, processed);
63
+ (0, _set2.default)(plugin.options, pathToSwap, processed);
56
64
  }
57
65
  } // Add some default values for tests as we don't actually
58
66
  // want to try to load anything during tests.
@@ -77,7 +85,7 @@ function processPlugin(plugin, rootDir) {
77
85
  module: plugin.module,
78
86
  subPluginPaths: plugin.subPluginPaths ? Array.from(plugin.subPluginPaths) : undefined,
79
87
  id: (0, _createId.createPluginId)(info.name, plugin),
80
- pluginOptions: (0, _lodash.merge)({
88
+ pluginOptions: (0, _merge2.default)({
81
89
  plugins: []
82
90
  }, plugin.options)
83
91
  };
@@ -1 +1 @@
1
- {"version":3,"file":"process-plugin.js","names":["processPlugin","plugin","rootDir","isString","parentDir","info","resolvePlugin","pluginOptions","plugins","options","isEmpty","option","Error","resolve","subPluginPaths","subPluginPath","segments","split","roots","pathToSwap","segment","slice","length","flat","map","root","processed","result","push","set","name","id","createPluginId","version","modulePath","module","Array","from","undefined","merge"],"sources":["../../../src/bootstrap/load-plugins/process-plugin.ts"],"sourcesContent":["import { IPluginInfo, PluginRef } from \"./types\"\nimport { createPluginId } from \"./utils/create-id\"\nimport { resolvePlugin } from \"./resolve-plugin\"\nimport { isString, isEmpty, set, merge } from \"lodash\"\n\nexport function processPlugin(plugin: PluginRef, rootDir: string): IPluginInfo {\n // Respect the directory that the plugin was sourced from initially\n rootDir = (!isString(plugin) && plugin.parentDir) || rootDir\n\n if (isString(plugin)) {\n const info = resolvePlugin(plugin, rootDir)\n\n return {\n ...info,\n pluginOptions: {\n plugins: [],\n },\n }\n }\n\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: Array<IPluginInfo> = []\n\n for (const root of roots) {\n const result = processPlugin(root, rootDir)\n processed.push(result)\n }\n\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"],"mappings":"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"}
1
+ {"version":3,"file":"process-plugin.js","names":["processPlugin","plugin","rootDir","parentDir","info","resolvePlugin","pluginOptions","plugins","options","option","Error","resolve","subPluginPaths","subPluginPath","segments","split","roots","pathToSwap","segment","slice","length","flat","map","root","processed","result","push","name","id","createPluginId","version","modulePath","module","Array","from","undefined"],"sources":["../../../src/bootstrap/load-plugins/process-plugin.ts"],"sourcesContent":["import { IPluginInfo, PluginRef } from \"./types\"\nimport { createPluginId } from \"./utils/create-id\"\nimport { resolvePlugin } from \"./resolve-plugin\"\nimport { isString, isEmpty, set, merge } from \"lodash\"\n\nexport function processPlugin(plugin: PluginRef, rootDir: string): IPluginInfo {\n // Respect the directory that the plugin was sourced from initially\n rootDir = (!isString(plugin) && plugin.parentDir) || rootDir\n\n if (isString(plugin)) {\n const info = resolvePlugin(plugin, rootDir)\n\n return {\n ...info,\n pluginOptions: {\n plugins: [],\n },\n }\n }\n\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: Array<IPluginInfo> = []\n\n for (const root of roots) {\n const result = processPlugin(root, rootDir)\n processed.push(result)\n }\n\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"],"mappings":"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"}
@@ -5,6 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  exports.__esModule = true;
6
6
  exports.resolvePlugin = resolvePlugin;
7
7
 
8
+ var _isString2 = _interopRequireDefault(require("lodash/isString"));
9
+
8
10
  var _path = _interopRequireDefault(require("path"));
9
11
 
10
12
  var _fs = _interopRequireDefault(require("fs"));
@@ -19,8 +21,6 @@ var _createHash = require("./utils/create-hash");
19
21
 
20
22
  var _reporter = _interopRequireDefault(require("gatsby-cli/lib/reporter"));
21
23
 
22
- var _lodash = require("lodash");
23
-
24
24
  var _checkLocalPlugin = require("./utils/check-local-plugin");
25
25
 
26
26
  var _compileGatsbyFiles = require("../../utils/parcel/compile-gatsby-files");
@@ -37,7 +37,7 @@ var _compileGatsbyFiles = require("../../utils/parcel/compile-gatsby-files");
37
37
  * This is the project location, from which are found the plugins
38
38
  */
39
39
  function resolvePlugin(plugin, rootDir) {
40
- const pluginName = (0, _lodash.isString)(plugin) ? plugin : plugin.resolve; // Handle local plugins
40
+ const pluginName = (0, _isString2.default)(plugin) ? plugin : plugin.resolve; // Handle local plugins
41
41
 
42
42
  const {
43
43
  validLocalPlugin,
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-plugin.js","names":["resolvePlugin","plugin","rootDir","pluginName","isString","resolve","validLocalPlugin","localPluginPath","checkLocalPlugin","packageJSON","JSON","parse","fs","readFileSync","name","warnOnIncompatiblePeerDependency","id","createPluginId","version","createFileContentHash","getResolvedFieldsForPlugin","requireSource","createRequireFromPath","require","resolvedPath","slash","path","dirname","isAbsolute","err","process","env","gatsby_log_level","reporter","panicOnBuild","Error"],"sources":["../../../src/bootstrap/load-plugins/resolve-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport fs from \"fs\"\nimport { slash, createRequireFromPath } from \"gatsby-core-utils\"\nimport { warnOnIncompatiblePeerDependency } from \"./validate\"\nimport { PackageJson } from \"../../..\"\nimport { IPluginInfo, PluginRef } from \"./types\"\nimport { createPluginId } from \"./utils/create-id\"\nimport { createFileContentHash } from \"./utils/create-hash\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport { isString } from \"lodash\"\nimport { checkLocalPlugin } from \"./utils/check-local-plugin\"\nimport { getResolvedFieldsForPlugin } from \"../../utils/parcel/compile-gatsby-files\"\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(plugin: PluginRef, rootDir: string): IPluginInfo {\n const pluginName = isString(plugin) ? plugin : plugin.resolve\n\n // Handle local plugins\n const { validLocalPlugin, localPluginPath = `` } = checkLocalPlugin(\n plugin,\n rootDir\n )\n\n if (validLocalPlugin && localPluginPath) {\n const packageJSON = JSON.parse(\n fs.readFileSync(`${localPluginPath}/package.json`, `utf-8`)\n ) as PackageJson\n const name = packageJSON.name || pluginName\n warnOnIncompatiblePeerDependency(name, packageJSON)\n\n return {\n resolve: localPluginPath,\n name,\n id: createPluginId(name),\n version:\n packageJSON?.version || createFileContentHash(localPluginPath, `**`),\n ...getResolvedFieldsForPlugin(rootDir, name),\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"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,aAAT,CAAuBC,MAAvB,EAA0CC,OAA1C,EAAwE;EAC7E,MAAMC,UAAU,GAAG,IAAAC,gBAAA,EAASH,MAAT,IAAmBA,MAAnB,GAA4BA,MAAM,CAACI,OAAtD,CAD6E,CAG7E;;EACA,MAAM;IAAEC,gBAAF;IAAoBC,eAAe,GAAI;EAAvC,IAA6C,IAAAC,kCAAA,EACjDP,MADiD,EAEjDC,OAFiD,CAAnD;;EAKA,IAAII,gBAAgB,IAAIC,eAAxB,EAAyC;IACvC,MAAME,WAAW,GAAGC,IAAI,CAACC,KAAL,CAClBC,WAAA,CAAGC,YAAH,CAAiB,GAAEN,eAAgB,eAAnC,EAAoD,OAApD,CADkB,CAApB;IAGA,MAAMO,IAAI,GAAGL,WAAW,CAACK,IAAZ,IAAoBX,UAAjC;IACA,IAAAY,0CAAA,EAAiCD,IAAjC,EAAuCL,WAAvC;IAEA,OAAO;MACLJ,OAAO,EAAEE,eADJ;MAELO,IAFK;MAGLE,EAAE,EAAE,IAAAC,wBAAA,EAAeH,IAAf,CAHC;MAILI,OAAO,EACL,CAAAT,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAES,OAAb,KAAwB,IAAAC,iCAAA,EAAsBZ,eAAtB,EAAwC,IAAxC,CALrB;MAML,GAAG,IAAAa,8CAAA,EAA2BlB,OAA3B,EAAoCY,IAApC;IANE,CAAP;EAQD;EAED;AACF;AACA;AACA;;;EACE,IAAI;IACF,MAAMO,aAAa,GACjBnB,OAAO,KAAK,IAAZ,GACI,IAAAoB,sCAAA,EAAuB,GAAEpB,OAAQ,aAAjC,CADJ,GAEIqB,OAHN,CADE,CAMF;IACA;;IACA,MAAMC,YAAY,GAAG,IAAAC,sBAAA,EACnBC,aAAA,CAAKC,OAAL,CACEN,aAAa,CAAChB,OAAd,CACEqB,aAAA,CAAKE,UAAL,CAAgBzB,UAAhB,IACIA,UADJ,GAEK,GAAEA,UAAW,eAHpB,CADF,CADmB,CAArB;IAUA,MAAMM,WAAW,GAAGC,IAAI,CAACC,KAAL,CAClBC,WAAA,CAAGC,YAAH,CAAiB,GAAEW,YAAa,eAAhC,EAAiD,OAAjD,CADkB,CAApB;IAGA,IAAAT,0CAAA,EAAiCN,WAAW,CAACK,IAA7C,EAAmDL,WAAnD;IAEA,OAAO;MACLJ,OAAO,EAAEmB,YADJ;MAELR,EAAE,EAAE,IAAAC,wBAAA,EAAeR,WAAW,CAACK,IAA3B,CAFC;MAGLA,IAAI,EAAEL,WAAW,CAACK,IAHb;MAILI,OAAO,EAAET,WAAW,CAACS;IAJhB,CAAP;EAMD,CA7BD,CA6BE,OAAOW,GAAP,EAAY;IACZ,IAAIC,OAAO,CAACC,GAAR,CAAYC,gBAAZ,KAAkC,SAAtC,EAAgD;MAC9CC,iBAAA,CAASC,YAAT,CACG,WAAU/B,UAAW,+BADxB,EAEE0B,GAFF;IAID,CALD,MAKO;MACLI,iBAAA,CAASC,YAAT,CACG,uCAAsC/B,UAAW,iFADpD;IAGD;;IACD,MAAM,IAAIgC,KAAJ,CAAW,aAAX,CAAN;EACD;AACF"}
1
+ {"version":3,"file":"resolve-plugin.js","names":["resolvePlugin","plugin","rootDir","pluginName","resolve","validLocalPlugin","localPluginPath","checkLocalPlugin","packageJSON","JSON","parse","fs","readFileSync","name","warnOnIncompatiblePeerDependency","id","createPluginId","version","createFileContentHash","getResolvedFieldsForPlugin","requireSource","createRequireFromPath","require","resolvedPath","slash","path","dirname","isAbsolute","err","process","env","gatsby_log_level","reporter","panicOnBuild","Error"],"sources":["../../../src/bootstrap/load-plugins/resolve-plugin.ts"],"sourcesContent":["import path from \"path\"\nimport fs from \"fs\"\nimport { slash, createRequireFromPath } from \"gatsby-core-utils\"\nimport { warnOnIncompatiblePeerDependency } from \"./validate\"\nimport { PackageJson } from \"../../..\"\nimport { IPluginInfo, PluginRef } from \"./types\"\nimport { createPluginId } from \"./utils/create-id\"\nimport { createFileContentHash } from \"./utils/create-hash\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport { isString } from \"lodash\"\nimport { checkLocalPlugin } from \"./utils/check-local-plugin\"\nimport { getResolvedFieldsForPlugin } from \"../../utils/parcel/compile-gatsby-files\"\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(plugin: PluginRef, rootDir: string): IPluginInfo {\n const pluginName = isString(plugin) ? plugin : plugin.resolve\n\n // Handle local plugins\n const { validLocalPlugin, localPluginPath = `` } = checkLocalPlugin(\n plugin,\n rootDir\n )\n\n if (validLocalPlugin && localPluginPath) {\n const packageJSON = JSON.parse(\n fs.readFileSync(`${localPluginPath}/package.json`, `utf-8`)\n ) as PackageJson\n const name = packageJSON.name || pluginName\n warnOnIncompatiblePeerDependency(name, packageJSON)\n\n return {\n resolve: localPluginPath,\n name,\n id: createPluginId(name),\n version:\n packageJSON?.version || createFileContentHash(localPluginPath, `**`),\n ...getResolvedFieldsForPlugin(rootDir, name),\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"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,aAAT,CAAuBC,MAAvB,EAA0CC,OAA1C,EAAwE;EAC7E,MAAMC,UAAU,GAAG,wBAASF,MAAT,IAAmBA,MAAnB,GAA4BA,MAAM,CAACG,OAAtD,CAD6E,CAG7E;;EACA,MAAM;IAAEC,gBAAF;IAAoBC,eAAe,GAAI;EAAvC,IAA6C,IAAAC,kCAAA,EACjDN,MADiD,EAEjDC,OAFiD,CAAnD;;EAKA,IAAIG,gBAAgB,IAAIC,eAAxB,EAAyC;IACvC,MAAME,WAAW,GAAGC,IAAI,CAACC,KAAL,CAClBC,WAAA,CAAGC,YAAH,CAAiB,GAAEN,eAAgB,eAAnC,EAAoD,OAApD,CADkB,CAApB;IAGA,MAAMO,IAAI,GAAGL,WAAW,CAACK,IAAZ,IAAoBV,UAAjC;IACA,IAAAW,0CAAA,EAAiCD,IAAjC,EAAuCL,WAAvC;IAEA,OAAO;MACLJ,OAAO,EAAEE,eADJ;MAELO,IAFK;MAGLE,EAAE,EAAE,IAAAC,wBAAA,EAAeH,IAAf,CAHC;MAILI,OAAO,EACL,CAAAT,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAES,OAAb,KAAwB,IAAAC,iCAAA,EAAsBZ,eAAtB,EAAwC,IAAxC,CALrB;MAML,GAAG,IAAAa,8CAAA,EAA2BjB,OAA3B,EAAoCW,IAApC;IANE,CAAP;EAQD;EAED;AACF;AACA;AACA;;;EACE,IAAI;IACF,MAAMO,aAAa,GACjBlB,OAAO,KAAK,IAAZ,GACI,IAAAmB,sCAAA,EAAuB,GAAEnB,OAAQ,aAAjC,CADJ,GAEIoB,OAHN,CADE,CAMF;IACA;;IACA,MAAMC,YAAY,GAAG,IAAAC,sBAAA,EACnBC,aAAA,CAAKC,OAAL,CACEN,aAAa,CAAChB,OAAd,CACEqB,aAAA,CAAKE,UAAL,CAAgBxB,UAAhB,IACIA,UADJ,GAEK,GAAEA,UAAW,eAHpB,CADF,CADmB,CAArB;IAUA,MAAMK,WAAW,GAAGC,IAAI,CAACC,KAAL,CAClBC,WAAA,CAAGC,YAAH,CAAiB,GAAEW,YAAa,eAAhC,EAAiD,OAAjD,CADkB,CAApB;IAGA,IAAAT,0CAAA,EAAiCN,WAAW,CAACK,IAA7C,EAAmDL,WAAnD;IAEA,OAAO;MACLJ,OAAO,EAAEmB,YADJ;MAELR,EAAE,EAAE,IAAAC,wBAAA,EAAeR,WAAW,CAACK,IAA3B,CAFC;MAGLA,IAAI,EAAEL,WAAW,CAACK,IAHb;MAILI,OAAO,EAAET,WAAW,CAACS;IAJhB,CAAP;EAMD,CA7BD,CA6BE,OAAOW,GAAP,EAAY;IACZ,IAAIC,OAAO,CAACC,GAAR,CAAYC,gBAAZ,KAAkC,SAAtC,EAAgD;MAC9CC,iBAAA,CAASC,YAAT,CACG,WAAU9B,UAAW,+BADxB,EAEEyB,GAFF;IAID,CALD,MAKO;MACLI,iBAAA,CAASC,YAAT,CACG,uCAAsC9B,UAAW,iFADpD;IAGD;;IACD,MAAM,IAAI+B,KAAJ,CAAW,aAAX,CAAN;EACD;AACF"}
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  exports.__esModule = true;
4
6
  exports.getAPI = void 0;
5
7
 
6
- var _lodash = require("lodash");
8
+ var _keys2 = _interopRequireDefault(require("lodash/keys"));
7
9
 
8
- const getAPI = api => (0, _lodash.keys)(api).reduce((merged, key) => {
9
- merged[key] = (0, _lodash.keys)(api[key]);
10
+ const getAPI = api => (0, _keys2.default)(api).reduce((merged, key) => {
11
+ merged[key] = (0, _keys2.default)(api[key]);
10
12
  return merged;
11
13
  }, {});
12
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"get-api.js","names":["getAPI","api","keys","reduce","merged","key"],"sources":["../../../../src/bootstrap/load-plugins/utils/get-api.ts"],"sourcesContent":["import { ExportType, ICurrentAPIs } from \"../validate\"\nimport { keys } from \"lodash\"\n\nexport const 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"],"mappings":";;;;;AACA;;AAEO,MAAMA,MAAM,GAAIC,GAAD,IAGpB,IAAAC,YAAA,EAAKD,GAAL,EAAUE,MAAV,CAAwC,CAACC,MAAD,EAASC,GAAT,KAAiB;EACvDD,MAAM,CAACC,GAAD,CAAN,GAAc,IAAAH,YAAA,EAAKD,GAAG,CAACI,GAAD,CAAR,CAAd;EACA,OAAOD,MAAP;AACD,CAHD,EAGG,EAHH,CAHK"}
1
+ {"version":3,"file":"get-api.js","names":["getAPI","api","reduce","merged","key"],"sources":["../../../../src/bootstrap/load-plugins/utils/get-api.ts"],"sourcesContent":["import { ExportType, ICurrentAPIs } from \"../validate\"\nimport { keys } from \"lodash\"\n\nexport const 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"],"mappings":";;;;;;;;;AAGO,MAAMA,MAAM,GAAIC,GAAD,IAGpB,oBAAKA,GAAL,EAAUC,MAAV,CAAwC,CAACC,MAAD,EAASC,GAAT,KAAiB;EACvDD,MAAM,CAACC,GAAD,CAAN,GAAc,oBAAKH,GAAG,CAACG,GAAD,CAAR,CAAd;EACA,OAAOD,MAAP;AACD,CAHD,EAGG,EAHH,CAHK"}
@@ -9,7 +9,13 @@ exports.handleMultipleReplaceRenderers = void 0;
9
9
  exports.validateConfigPluginsOptions = validateConfigPluginsOptions;
10
10
  exports.warnOnIncompatiblePeerDependency = warnOnIncompatiblePeerDependency;
11
11
 
12
- var _lodash = _interopRequireDefault(require("lodash"));
12
+ var _get2 = _interopRequireDefault(require("lodash/get"));
13
+
14
+ var _intersection2 = _interopRequireDefault(require("lodash/intersection"));
15
+
16
+ var _toPairs2 = _interopRequireDefault(require("lodash/toPairs"));
17
+
18
+ var _difference2 = _interopRequireDefault(require("lodash/difference"));
13
19
 
14
20
  var _path = _interopRequireDefault(require("path"));
15
21
 
@@ -52,7 +58,7 @@ const getGatsbyUpgradeVersion = entries => entries.reduce((version, entry) => {
52
58
  function getBadExports(plugin, pluginAPIKeys, apis) {
53
59
  let badExports = []; // Discover any exports from plugins which are not "known"
54
60
 
55
- badExports = badExports.concat(_lodash.default.difference(pluginAPIKeys, apis).map(e => {
61
+ badExports = badExports.concat((0, _difference2.default)(pluginAPIKeys, apis).map(e => {
56
62
  return {
57
63
  exportName: e,
58
64
  pluginName: plugin.name,
@@ -105,7 +111,7 @@ async function handleBadExports({
105
111
  if (hasBadExports) {
106
112
  const latestAPIs = await (0, _getLatestApis.getLatestAPIs)(); // Output error messages for all bad exports
107
113
 
108
- _lodash.default.toPairs(badExports).forEach(badItem => {
114
+ (0, _toPairs2.default)(badExports).forEach(badItem => {
109
115
  const [exportType, entries] = badItem;
110
116
 
111
117
  if (entries.length > 0) {
@@ -324,17 +330,17 @@ function collatePluginAPIs({
324
330
  const pluginSSRExports = (0, _resolveModuleExports.resolveModuleExports)(`${plugin.resolve}/gatsby-ssr`);
325
331
 
326
332
  if (pluginNodeExports.length > 0) {
327
- plugin.nodeAPIs = _lodash.default.intersection(pluginNodeExports, currentAPIs.node);
333
+ plugin.nodeAPIs = (0, _intersection2.default)(pluginNodeExports, currentAPIs.node);
328
334
  badExports.node = badExports.node.concat(getBadExports(plugin, pluginNodeExports, currentAPIs.node)); // Collate any bad exports
329
335
  }
330
336
 
331
337
  if (pluginBrowserExports.length > 0) {
332
- plugin.browserAPIs = _lodash.default.intersection(pluginBrowserExports, currentAPIs.browser);
338
+ plugin.browserAPIs = (0, _intersection2.default)(pluginBrowserExports, currentAPIs.browser);
333
339
  badExports.browser = badExports.browser.concat(getBadExports(plugin, pluginBrowserExports, currentAPIs.browser)); // Collate any bad exports
334
340
  }
335
341
 
336
342
  if (pluginSSRExports.length > 0) {
337
- plugin.ssrAPIs = _lodash.default.intersection(pluginSSRExports, currentAPIs.ssr);
343
+ plugin.ssrAPIs = (0, _intersection2.default)(pluginSSRExports, currentAPIs.ssr);
338
344
  badExports.ssr = badExports.ssr.concat(getBadExports(plugin, pluginSSRExports, currentAPIs.ssr)); // Collate any bad exports
339
345
  }
340
346
  });
@@ -397,7 +403,7 @@ exports.handleMultipleReplaceRenderers = handleMultipleReplaceRenderers;
397
403
 
398
404
  function warnOnIncompatiblePeerDependency(name, packageJSON) {
399
405
  // Note: In the future the peer dependency should be enforced for all plugins.
400
- const gatsbyPeerDependency = _lodash.default.get(packageJSON, `peerDependencies.gatsby`);
406
+ const gatsbyPeerDependency = (0, _get2.default)(packageJSON, `peerDependencies.gatsby`);
401
407
 
402
408
  if (!_gatsbyWorker.isWorker && gatsbyPeerDependency && !semver.satisfies(_package.version, gatsbyPeerDependency, {
403
409
  includePrerelease: true
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","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","getLatestAPIs","toPairs","badItem","context","reporter","error","id","validatePluginsOptions","plugins","rootDir","newPlugins","Promise","all","gatsbyNode","resolvedPlugin","resolvePlugin","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","configDir","parentDir","relative","isSchema","warn","describe","append","warning","validateOptionsSchema","validationWarnings","details","stripIndent","trackCli","valueString","subErrors","subPlugins","size","from","ValidationError","validationErrors","validateConfigPluginsOptions","config","process","exit","collatePluginAPIs","flattenedPlugins","node","browser","ssr","nodeAPIs","browserAPIs","ssrAPIs","pluginNodeExports","resolveModuleExports","resolvedCompiledGatsbyNode","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"],"sources":["../../../src/bootstrap/load-plugins/validate.ts"],"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 \"./resolve-plugin\"\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\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 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\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 const { value, warning } = await validateOptionsSchema(\n optionsSchema,\n (plugin.options as IPluginInfoOptions) || {}\n )\n\n plugin.options = value\n\n // Handle unknown key warnings\n const validationWarnings = warning?.details\n\n if (validationWarnings?.length > 0) {\n reporter.warn(\n stripIndent(`\n Warning: there are unknown plugin options for \"${plugin.resolve}\"${\n configDir ? `, configured by ${configDir}` : ``\n }: ${validationWarnings\n .map(error => error.path.join(`.`))\n .join(`, `)}\n Please open an issue at https://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 // Validate subplugins\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 const validationErrors = error.details\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 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\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.resolvedCompiledGatsbyNode ?? `${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.com/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.com/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"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAQA;;;;;;AAuBA,MAAMA,uBAAuB,GAAIC,OAAD,IAC9BA,OAAO,CAACC,MAAR,CAAe,CAACC,OAAD,EAAUC,KAAV,KAAoB;EACjC,IAAIA,KAAK,CAACC,GAAN,IAAaD,KAAK,CAACC,GAAN,CAAUF,OAA3B,EAAoC;IAClC,OAAOG,MAAM,CAACC,EAAP,CAAUH,KAAK,CAACC,GAAN,CAAUF,OAApB,EAA6BA,OAAO,IAAK,OAAzC,IACHC,KAAK,CAACC,GAAN,CAAUF,OADP,GAEHA,OAFJ;EAGD;;EACD,OAAOA,OAAP;AACD,CAPD,EAOI,EAPJ,CADF,C,CAUA;AACA;;;AACA,SAASK,aAAT,CACEC,MADF,EAEEC,aAFF,EAGEC,IAHF,EAIiB;EACf,IAAIC,UAAyB,GAAG,EAAhC,CADe,CAEf;;EACAA,UAAU,GAAGA,UAAU,CAACC,MAAX,CACXC,eAAA,CAAEC,UAAF,CAAaL,aAAb,EAA4BC,IAA5B,EAAkCK,GAAlC,CAAsCC,CAAC,IAAI;IACzC,OAAO;MACLC,UAAU,EAAED,CADP;MAELE,UAAU,EAAEV,MAAM,CAACW,IAFd;MAGLC,aAAa,EAAEZ,MAAM,CAACN;IAHjB,CAAP;EAKD,CAND,CADW,CAAb;EASA,OAAOS,UAAP;AACD;;AAED,SAASU,eAAT,CACEV,UADF,EAEEW,UAFF,EAGEC,WAHF,EAIEC,UAJF,EAWE;EACA,MAAMxB,OAAO,GAAGW,UAAU,CAACI,GAAX,CAAeU,EAAE,IAAI;IACnC,OAAO,EACL,GAAGA,EADE;MAELrB,GAAG,EAAEoB,UAAU,CAACF,UAAD,CAAV,CAAuBG,EAAE,CAACR,UAA1B;IAFA,CAAP;EAID,CALe,CAAhB;EAOA,MAAMS,oBAAoB,GAAG3B,uBAAuB,CAACC,OAAD,CAApD;EACA,MAAM2B,MAAqB,GAAG,EAA9B;EACA,MAAMC,KAAK,GAAGF,oBAAoB,GAC9B,CAAE,uBAAsBA,oBAAqB,EAA7C,CAD8B,GAE9B,EAFJ;EAIA1B,OAAO,CAAC6B,OAAR,CAAgB1B,KAAK,IAAI;IACvB,MAAM2B,YAAY,GAAGC,gBAAgB,CAACC,aAAjB,CACnB7B,KAAK,CAACc,UADa,EAEnBM,WAAW,CAACD,UAAD,CAFQ,CAArB;IAIA,MAAMW,eAAe,GAAG9B,KAAK,CAACe,UAAN,IAAqB,qBAA7C;IAEA,MAAMgB,OAAO,GAAG/B,KAAK,CAACC,GAAN,GACZD,KAAK,CAACC,GAAN,CAAUF,OAAV,GACG,4BAA2BC,KAAK,CAACC,GAAN,CAAUF,OAAQ,EADhD,GAEG,4CAHS,GAIX,oBAJL;;IAMA,IAAI+B,eAAJ,EAAqB;MACnBN,MAAM,CAACQ,IAAP,CACG,uBAAsBb,UAAW,yBAAwBnB,KAAK,CAACc,UAAW,WAAUiB,OAAQ,GAD/F;IAGD,CAJD,MAIO;MACLP,MAAM,CAACQ,IAAP,CACG,gBAAehC,KAAK,CAACe,UAAW,IAAGf,KAAK,CAACiB,aAAc,sBAAqBjB,KAAK,CAACc,UAAW,WAAUiB,OAAQ,GADlH;IAGD;;IAED,IAAIJ,YAAY,CAACM,SAAb,CAAuBC,MAAvB,GAAgC,GAApC,EAAyC;MACvCT,KAAK,CAACO,IAAN,CACG,WAAUhC,KAAK,CAACc,UAAW,SAAQa,YAAY,CAACM,SAAb,CAAuBE,MAAO,GADpE;IAGD;EACF,CA5BD;EA8BA,OAAO;IACLX,MADK;IAEL3B,OAFK;IAGLsB,UAHK;IAILM,KAJK;IAKL;IACAW,aAAa,EAAE,CACZ,gEADY,EAGZ3B,MAHY,CAGLe,MAHK,EAIZf,MAJY,CAKXgB,KAAK,CAACY,MAAN,GAAe,CAAf,GACI,CAAE,IAAF,EAAQ,kDAAR,EAA2D,GAAGZ,KAA9D,CADJ,GAEI,EAPO,EASZa,MATY,CASLC,OATK,EAUZC,IAVY,CAUN,IAVM;EANV,CAAP;AAkBD;;AAEM,eAAeC,gBAAf,CAAgC;EACrCrB,WADqC;EAErCZ;AAFqC,CAAhC,EAMW;EAChB,MAAMkC,aAAa,GAAGC,MAAM,CAACC,IAAP,CAAYpC,UAAZ,EAAwBqC,IAAxB,CACpB5C,GAAG,IAAIO,UAAU,CAACP,GAAD,CAAV,CAAgBoC,MAAhB,GAAyB,CADZ,CAAtB;;EAGA,IAAIK,aAAJ,EAAmB;IACjB,MAAMrB,UAAU,GAAG,MAAM,IAAAyB,4BAAA,GAAzB,CADiB,CAEjB;;IACApC,eAAA,CAAEqC,OAAF,CAAUvC,UAAV,EAAsBkB,OAAtB,CAA8BsB,OAAO,IAAI;MACvC,MAAM,CAAC7B,UAAD,EAAatB,OAAb,IAAwBmD,OAA9B;;MACA,IAAInD,OAAO,CAACwC,MAAR,GAAiB,CAArB,EAAwB;QACtB,MAAMY,OAAO,GAAG/B,eAAe,CAC7BrB,OAD6B,EAE7BsB,UAF6B,EAG7BC,WAH6B,EAI7BC,UAJ6B,CAA/B;;QAMA6B,iBAAA,CAASC,KAAT,CAAe;UACbC,EAAE,EAAG,OADQ;UAEbH;QAFa,CAAf;MAID;IACF,CAdD;EAeD;AACF;;AAED,eAAeI,sBAAf,CACEC,OADF,EAEEC,OAFF,EAMG;EACD,IAAI/B,MAAM,GAAG,CAAb;EACA,MAAMgC,UAAU,GAAG,MAAMC,OAAO,CAACC,GAAR,CACvBJ,OAAO,CAAC1C,GAAR,CAAY,MAAMP,MAAN,IAAgB;IAC1B,IAAIsD,UAAJ;;IACA,IAAI;MACF,MAAMC,cAAc,GAAG,IAAAC,4BAAA,EAAcxD,MAAd,EAAsBkD,OAAtB,CAAvB;MACAI,UAAU,GAAGG,OAAO,CAAE,GAAEF,cAAc,CAACG,OAAQ,cAA3B,CAApB;IACD,CAHD,CAGE,OAAOC,GAAP,EAAY;MACZL,UAAU,GAAG,EAAb;IACD;;IAED,IAAI,CAACA,UAAU,CAACM,mBAAhB,EAAqC,OAAO5D,MAAP;IAErC,MAAM6D,cAAc,GAAG,IAAIC,GAAJ,EAAvB;IAEA,IAAIC,aAAa,GACfT,UAAU,CAACM,mBADO,CAKlB;MACAI,GAAG,EAAEA,sBAAA,CAAIC,MAAJ,CAAWC,GAAG,IAAI;QACrB,OAAO;UACLC,IAAI,EAAG,YADF;UAELC,IAAI,EAAEF,GAAG,CACNG,KADG,GAEHC,KAFG,CAGFJ,GAAG,CAACK,YAAJ,CACEL,GAAG,CAACM,MAAJ,EADF,EAEEN,GAAG,CAACO,MAAJ,CAAW;YACTf,OAAO,EAAEM,sBAAA,CAAIQ,MAAJ,EADA;YAETE,OAAO,EAAEV,sBAAA,CAAIS,MAAJ,CAAW,EAAX,EAAeE,OAAf,CAAuB,IAAvB;UAFA,CAAX,CAFF,CAHE,EAWHC,MAXG,CAWI,CAACC,UAAD,EAAaC,OAAb,KAAyB;YAC/B,MAAMnF,KAAK,GAAGmF,OAAO,CAACC,MAAR,CAAeC,MAAf,CAAsBrF,KAApC;YACA,OAAOkF,UAAU,CAACtE,GAAX,CAAe0E,KAAK,IAAI;cAC7B,IAAI,OAAOA,KAAP,KAAkB,QAAtB,EAA+B;gBAC7BA,KAAK,GAAG;kBAAEvB,OAAO,EAAEuB;gBAAX,CAAR;cACD;;cAED,IAAI;gBACF,MAAM1B,cAAc,GAAG,IAAAC,4BAAA,EAAcyB,KAAd,EAAqB/B,OAArB,CAAvB;;gBACA,MAAMgC,UAAU,GAAGzB,OAAO,CAACC,OAAR,CAChB,GAAEH,cAAc,CAACG,OAAQ,GAAE/D,KAAK,GAAI,IAAGA,KAAM,EAAb,GAAkB,EAAE,EADpC,CAAnB;;gBAGAsF,KAAK,CAACC,UAAN,GAAmBA,UAAnB;gBACAD,KAAK,CAACE,MAAN,GAAe1B,OAAO,CAACyB,UAAD,CAAtB;gBAEA,MAAME,cAAc,GAAGN,OAAO,CAACO,KAAR,CAAcC,IAAd,CACpB/E,GADoB,CAChB,CAACgF,GAAD,EAAMC,KAAN,KAAgB;kBACnB;kBACA,IACE,OAAOD,GAAP,KAAgB,QAAhB,IACAE,KAAK,CAACC,OAAN,CACEZ,OAAO,CAACO,KAAR,CAAcM,SAAd,CACEb,OAAO,CAACO,KAAR,CAAcC,IAAd,CAAmBtD,MAAnB,GAA4BwD,KAA5B,GAAoC,CADtC,CADF,CAFF,EAOE;oBACA,IAAIA,KAAK,KAAKV,OAAO,CAACO,KAAR,CAAcC,IAAd,CAAmBtD,MAAnB,GAA4B,CAA1C,EAA6C;sBAC3C,MAAM,IAAI4D,KAAJ,CACH,8CADG,CAAN;oBAGD;;oBACD,OAAQ,IAAR;kBACD;;kBAED,OAAOL,GAAP;gBACD,CApBoB,EAqBpBpD,IArBoB,CAqBd,GArBc,CAAvB;gBAuBA0B,cAAc,CAACgC,GAAf,CAAmBT,cAAnB;cACD,CAhCD,CAgCE,OAAOzB,GAAP,EAAY;gBACZmC,OAAO,CAACC,GAAR,CAAYpC,GAAZ;cACD;;cAED,OAAOsB,KAAP;YACD,CA1CM,CAAP;UA2CD,CAxDG,EAwDA,sCAxDA,EAyDHe,OAzDG,CAyDK,EAzDL,CAFD;UA4DLC,IAAI,EAAE,CAAClB,MAAD,EAAckB,IAAd,KAAiC;YACrC,IACEA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,IAAAA,IAAI,CAAEtG,KAAN,IACAoF,MADA,IAEA,OAAOA,MAAP,KAAmB,QAFnB,IAGAA,MAAM,CAACmB,SAJT,EAKE;cACA,OAAOnB,MAAM,CAACmB,SAAP,CAAkB,OAAlB,EAA0BD,IAAI,CAACtG,KAA/B,EAAsC;gBAAEwG,KAAK,EAAE;cAAT,CAAtC,CAAP;YACD;;YACD,OAAOpB,MAAP;UACD;QAtEI,CAAP;MAwED,CAzEI;IADL,CALkB,CAApB,CAb0B,CA+F1B;IACA;;IACA,MAAMqB,SAAS,GACZpG,MAAM,CAACqG,SAAP,IACCnD,OADD,IAECoC,aAAA,CAAKgB,QAAL,CAAcpD,OAAd,EAAuBlD,MAAM,CAACqG,SAA9B,CAFF,IAGA,IAJF;;IAMA,IAAI,CAACrC,sBAAA,CAAIuC,QAAJ,CAAaxC,aAAb,CAAD,IAAgCA,aAAa,CAACI,IAAd,KAAwB,QAA5D,EAAqE;MACnE;MACAtB,iBAAA,CAAS2D,IAAT,CACG,WAAUxG,MAAM,CAAC0D,OAAQ,gFAD5B;;MAGA,OAAO1D,MAAP;IACD;;IAED,IAAI;MAAA;;MACF,IAAI,CAAC+D,aAAa,CAAC0C,QAAd,GAAyBlE,IAAzB,CAA8BU,OAAnC,EAA4C;QAC1C;QACA;QACA;QACAc,aAAa,GAAGA,aAAa,CAAC2C,MAAd,CAAqB;UACnCzD,OAAO,EAAEe,sBAAA,CAAIK,KAAJ,GAAYrC,MAAZ,CAAmB,CAAnB;QAD0B,CAArB,CAAhB;MAGD;;MAED,MAAM;QAAEiD,KAAF;QAAS0B;MAAT,IAAqB,MAAM,IAAAC,wCAAA,EAC/B7C,aAD+B,EAE9B/D,MAAM,CAAC0E,OAAR,IAA0C,EAFX,CAAjC;MAKA1E,MAAM,CAAC0E,OAAP,GAAiBO,KAAjB,CAfE,CAiBF;;MACA,MAAM4B,kBAAkB,GAAGF,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEG,OAApC;;MAEA,IAAI,CAAAD,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,YAAAA,kBAAkB,CAAE7E,MAApB,IAA6B,CAAjC,EAAoC;QAClCa,iBAAA,CAAS2D,IAAT,CACE,IAAAO,uBAAA,EAAa;AACzB,yDAAyD/G,MAAM,CAAC0D,OAAQ,IAC1D0C,SAAS,GAAI,mBAAkBA,SAAU,EAAhC,GAAqC,EAC/C,KAAIS,kBAAkB,CACpBtG,GADE,CACEuC,KAAK,IAAIA,KAAK,CAACwC,IAAN,CAAWnD,IAAX,CAAiB,GAAjB,CADX,EAEFA,IAFE,CAEI,IAFJ,CAES;AAC1B,kDACUnC,MAAM,CAAC0D,OACR;AACT,OATY,CADF;;QAYA,IAAAsD,yBAAA,EAAU,uBAAV,EAAkC;UAChCrG,IAAI,EAAEX,MAAM,CAAC0D,OADmB;UAEhCuD,WAAW,EAAEJ,kBAAkB,CAC5BtG,GADU,CACNuC,KAAK,IAAIA,KAAK,CAACwC,IAAN,CAAWnD,IAAX,CAAiB,GAAjB,CADH,EAEVA,IAFU,CAEJ,IAFI;QAFmB,CAAlC,EAbkC,CAmBlC;MACD,CAxCC,CA0CF;;;MACA,uBAAInC,MAAM,CAAC0E,OAAX,4CAAI,gBAAgBzB,OAApB,EAA6B;QAC3B,MAAM;UAAE9B,MAAM,EAAE+F,SAAV;UAAqBjE,OAAO,EAAEkE;QAA9B,IACJ,MAAMnE,sBAAsB,CAC1BhD,MAAM,CAAC0E,OAAP,CAAezB,OADW,EAE1BC,OAF0B,CAD9B;QAKAlD,MAAM,CAAC0E,OAAP,CAAezB,OAAf,GAAyBkE,UAAzB;;QACA,IAAIA,UAAU,CAACnF,MAAX,GAAoB,CAAxB,EAA2B;UACzB6B,cAAc,CAACgC,GAAf,CAAoB,SAApB;QACD;;QACD1E,MAAM,IAAI+F,SAAV;MACD;;MACD,IAAIrD,cAAc,CAACuD,IAAf,GAAsB,CAA1B,EAA6B;QAC3BpH,MAAM,CAAC6D,cAAP,GAAwB4B,KAAK,CAAC4B,IAAN,CAAWxD,cAAX,CAAxB;MACD;IACF,CA1DD,CA0DE,OAAOf,KAAP,EAAc;MACd,IAAIA,KAAK,YAAYkB,sBAAA,CAAIsD,eAAzB,EAA0C;QACxC,MAAMC,gBAAgB,GAAGzE,KAAK,CAACgE,OAA/B;;QACA,IAAIS,gBAAgB,CAACvF,MAAjB,GAA0B,CAA9B,EAAiC;UAC/Ba,iBAAA,CAASC,KAAT,CAAe;YACbC,EAAE,EAAG,OADQ;YAEbH,OAAO,EAAE;cACPwD,SADO;cAEPmB,gBAFO;cAGP7G,UAAU,EAAEV,MAAM,CAAC0D;YAHZ;UAFI,CAAf;;UAQAvC,MAAM;QACP;;QACD,OAAOnB,MAAP;MACD;;MAED,MAAM8C,KAAN;IACD;;IAED,OAAO9C,MAAP;EACD,CA9LD,CADuB,CAAzB;EAiMA,OAAO;IAAEmB,MAAF;IAAU8B,OAAO,EAAEE;EAAnB,CAAP;AACD;;AAEM,eAAeqE,4BAAf,CACLC,MAAmB,GAAG,EADjB,EAELvE,OAFK,EAGU;EACf,IAAI,CAACuE,MAAM,CAACxE,OAAZ,EAAqB;EAErB,MAAM;IAAE9B,MAAF;IAAU8B;EAAV,IAAsB,MAAMD,sBAAsB,CACtDyE,MAAM,CAACxE,OAD+C,EAEtDC,OAFsD,CAAxD;EAKAuE,MAAM,CAACxE,OAAP,GAAiBA,OAAjB;;EAEA,IAAI9B,MAAM,GAAG,CAAb,EAAgB;IACduG,OAAO,CAACC,IAAR,CAAa,CAAb;EACD;AACF;AAED;AACA;AACA;;;AACO,SAASC,iBAAT,CAA2B;EAChC7G,WADgC;EAEhC8G;AAFgC,CAA3B,EAMkE;EACvE;EACA,MAAM1H,UAAqB,GAAG;IAC5B2H,IAAI,EAAE,EADsB;IAE5BC,OAAO,EAAE,EAFmB;IAG5BC,GAAG,EAAE;EAHuB,CAA9B;EAMAH,gBAAgB,CAACxG,OAAjB,CAAyBrB,MAAM,IAAI;IAAA;;IACjCA,MAAM,CAACiI,QAAP,GAAkB,EAAlB;IACAjI,MAAM,CAACkI,WAAP,GAAqB,EAArB;IACAlI,MAAM,CAACmI,OAAP,GAAiB,EAAjB,CAHiC,CAKjC;IACA;IACA;;IACA,MAAMC,iBAAiB,GAAG,IAAAC,0CAAA,2BACxBrI,MAAM,CAACsI,0BADiB,yEACc,GAAEtI,MAAM,CAAC0D,OAAQ,cAD/B,EAExB;MACE6E,IAAI,EAAG;IADT,CAFwB,CAA1B;IAMA,MAAMC,oBAAoB,GAAG,IAAAH,0CAAA,EAC1B,GAAErI,MAAM,CAAC0D,OAAQ,iBADS,CAA7B;IAGA,MAAM+E,gBAAgB,GAAG,IAAAJ,0CAAA,EACtB,GAAErI,MAAM,CAAC0D,OAAQ,aADK,CAAzB;;IAIA,IAAI0E,iBAAiB,CAACpG,MAAlB,GAA2B,CAA/B,EAAkC;MAChChC,MAAM,CAACiI,QAAP,GAAkB5H,eAAA,CAAEqI,YAAF,CAAeN,iBAAf,EAAkCrH,WAAW,CAAC+G,IAA9C,CAAlB;MACA3H,UAAU,CAAC2H,IAAX,GAAkB3H,UAAU,CAAC2H,IAAX,CAAgB1H,MAAhB,CAChBL,aAAa,CAACC,MAAD,EAASoI,iBAAT,EAA4BrH,WAAW,CAAC+G,IAAxC,CADG,CAAlB,CAFgC,CAI9B;IACH;;IAED,IAAIU,oBAAoB,CAACxG,MAArB,GAA8B,CAAlC,EAAqC;MACnChC,MAAM,CAACkI,WAAP,GAAqB7H,eAAA,CAAEqI,YAAF,CACnBF,oBADmB,EAEnBzH,WAAW,CAACgH,OAFO,CAArB;MAIA5H,UAAU,CAAC4H,OAAX,GAAqB5H,UAAU,CAAC4H,OAAX,CAAmB3H,MAAnB,CACnBL,aAAa,CAACC,MAAD,EAASwI,oBAAT,EAA+BzH,WAAW,CAACgH,OAA3C,CADM,CAArB,CALmC,CAOjC;IACH;;IAED,IAAIU,gBAAgB,CAACzG,MAAjB,GAA0B,CAA9B,EAAiC;MAC/BhC,MAAM,CAACmI,OAAP,GAAiB9H,eAAA,CAAEqI,YAAF,CAAeD,gBAAf,EAAiC1H,WAAW,CAACiH,GAA7C,CAAjB;MACA7H,UAAU,CAAC6H,GAAX,GAAiB7H,UAAU,CAAC6H,GAAX,CAAe5H,MAAf,CACfL,aAAa,CAACC,MAAD,EAASyI,gBAAT,EAA2B1H,WAAW,CAACiH,GAAvC,CADE,CAAjB,CAF+B,CAI7B;IACH;EACF,CA5CD;EA8CA,OAAO;IACLH,gBAAgB,EAAEA,gBADb;IAEL1H;EAFK,CAAP;AAID;;AAEM,MAAMwI,8BAA8B,GAAG,CAAC;EAC7Cd;AAD6C,CAAD,KAIf;EAC7B;EACA,MAAMe,eAAe,GAAGf,gBAAgB,CACrC5F,MADqB,CACdjC,MAAM,IAAIA,MAAM,CAACmI,OAAP,CAAeU,QAAf,CAAyB,iBAAzB,CADI,EAErBtI,GAFqB,CAEjBP,MAAM,IAAIA,MAAM,CAACW,IAFA,CAAxB;;EAGA,IAAIiI,eAAe,CAAC5G,MAAhB,GAAyB,CAA7B,EAAgC;IAC9B,IAAI4G,eAAe,CAACC,QAAhB,CAA0B,qBAA1B,CAAJ,EAAqD;MACnDhG,iBAAA,CAAS2D,IAAT,CAAe,6CAAf;;MACA3D,iBAAA,CAAS2D,IAAT,CAAcoC,eAAe,CAACzG,IAAhB,CAAsB,IAAtB,CAAd;;MACAU,iBAAA,CAAS2D,IAAT,CACG,4FADH;IAGD,CAND,MAMO;MACLV,OAAO,CAACC,GAAR,CAAa,EAAb;;MACAlD,iBAAA,CAASC,KAAT,CACG,kEADH;;MAGAD,iBAAA,CAASC,KAAT,CAAe8F,eAAe,CAACzG,IAAhB,CAAsB,IAAtB,CAAf;;MACAU,iBAAA,CAASC,KAAT,CAAgB,4BAAhB;;MACAD,iBAAA,CAASC,KAAT,CACG,oEADH;;MAGA,IAAI4E,OAAO,CAACoB,GAAR,CAAYC,QAAZ,KAA0B,YAA9B,EAA2CrB,OAAO,CAACC,IAAR,CAAa,CAAb;IAC5C,CAlB6B,CAoB9B;;;IACA,MAAMqB,SAAS,GAAGJ,eAAe,CAACK,KAAhB,CAAsB,CAAtB,EAAyB,CAAC,CAA1B,CAAlB,CArB8B,CAuB9B;IACA;;IACA,MAAMC,QAAuB,GAAG,EAAhC;IACArB,gBAAgB,CAACxG,OAAjB,CAAyB,CAAC8H,EAAD,EAAKC,CAAL,KAAW;MAClC,IAAIJ,SAAS,CAACH,QAAV,CAAmBM,EAAE,CAACxI,IAAtB,CAAJ,EAAiC;QAC/BuI,QAAQ,CAACvH,IAAT,CACG,uEAAsEwH,EAAE,CAACxI,IAAK,EADjF;QAGAkH,gBAAgB,CAACuB,CAAD,CAAhB,CAAoBC,OAApB,GAA8B,IAA9B;MACD;IACF,CAPD;;IAQA,IAAIH,QAAQ,CAAClH,MAAT,GAAkB,CAAtB,EAAyB;MACvB8D,OAAO,CAACC,GAAR,CAAa,EAAb;MACAmD,QAAQ,CAAC7H,OAAT,CAAiBiI,CAAC,IAAIzG,iBAAA,CAAS2D,IAAT,CAAc8C,CAAd,CAAtB;MACAxD,OAAO,CAACC,GAAR,CAAa,EAAb;IACD;EACF;;EAED,OAAO8B,gBAAP;AACD,CAnDM;;;;AAqDA,SAAS0B,gCAAT,CACL5I,IADK,EAEL6I,WAFK,EAGC;EACN;EACA,MAAMC,oBAAoB,GAAGpJ,eAAA,CAAEqJ,GAAF,CAAMF,WAAN,EAAoB,yBAApB,CAA7B;;EACA,IACE,CAACG,sBAAD,IACAF,oBADA,IAEA,CAAC5J,MAAM,CAAC+J,SAAP,CAAiBC,gBAAjB,EAAgCJ,oBAAhC,EAAsD;IACrDK,iBAAiB,EAAE;EADkC,CAAtD,CAHH,EAME;IACAjH,iBAAA,CAAS2D,IAAT,CACG,UAAS7F,IAAK,+CAA8CkJ,gBAAc,yBAAwBJ,oBAAqB,EAD1H;EAGD;AACF"}
1
+ {"version":3,"file":"validate.js","names":["getGatsbyUpgradeVersion","entries","reduce","version","entry","api","semver","gt","getBadExports","plugin","pluginAPIKeys","apis","badExports","concat","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","getLatestAPIs","badItem","context","reporter","error","id","validatePluginsOptions","plugins","rootDir","newPlugins","Promise","all","gatsbyNode","resolvedPlugin","resolvePlugin","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","configDir","parentDir","relative","isSchema","warn","describe","append","warning","validateOptionsSchema","validationWarnings","details","stripIndent","trackCli","valueString","subErrors","subPlugins","size","from","ValidationError","validationErrors","validateConfigPluginsOptions","config","process","exit","collatePluginAPIs","flattenedPlugins","node","browser","ssr","nodeAPIs","browserAPIs","ssrAPIs","pluginNodeExports","resolveModuleExports","resolvedCompiledGatsbyNode","mode","pluginBrowserExports","pluginSSRExports","handleMultipleReplaceRenderers","rendererPlugins","includes","env","NODE_ENV","ignorable","slice","messages","fp","i","skipSSR","m","warnOnIncompatiblePeerDependency","packageJSON","gatsbyPeerDependency","isWorker","satisfies","gatsbyVersion","includePrerelease"],"sources":["../../../src/bootstrap/load-plugins/validate.ts"],"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 \"./resolve-plugin\"\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\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 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\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 const { value, warning } = await validateOptionsSchema(\n optionsSchema,\n (plugin.options as IPluginInfoOptions) || {}\n )\n\n plugin.options = value\n\n // Handle unknown key warnings\n const validationWarnings = warning?.details\n\n if (validationWarnings?.length > 0) {\n reporter.warn(\n stripIndent(`\n Warning: there are unknown plugin options for \"${plugin.resolve}\"${\n configDir ? `, configured by ${configDir}` : ``\n }: ${validationWarnings\n .map(error => error.path.join(`.`))\n .join(`, `)}\n Please open an issue at https://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 // Validate subplugins\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 const validationErrors = error.details\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 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\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.resolvedCompiledGatsbyNode ?? `${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.com/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.com/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"],"mappings":"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"}