gatsby 2.0.55 → 2.0.59

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 (51) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/cache-dir/commonjs/ensure-resources.js +42 -11
  3. package/cache-dir/commonjs/production-app.js +0 -1
  4. package/cache-dir/ensure-resources.js +40 -11
  5. package/cache-dir/production-app.js +0 -1
  6. package/dist/bootstrap/index.js +31 -2
  7. package/dist/bootstrap/index.js.map +1 -1
  8. package/dist/bootstrap/load-plugins/load.js +1 -1
  9. package/dist/bootstrap/load-plugins/load.js.map +1 -1
  10. package/dist/db/loki/custom-comparators.js +223 -0
  11. package/dist/db/loki/custom-comparators.js.map +1 -0
  12. package/dist/db/loki/index.js +157 -0
  13. package/dist/db/loki/index.js.map +1 -0
  14. package/dist/db/loki/nodes-query.js +348 -0
  15. package/dist/db/loki/nodes-query.js.map +1 -0
  16. package/dist/db/loki/nodes.js +380 -8
  17. package/dist/db/loki/nodes.js.map +1 -1
  18. package/dist/db/node-tracking.js +10 -7
  19. package/dist/db/node-tracking.js.map +1 -1
  20. package/dist/db/nodes-query.js +60 -0
  21. package/dist/db/nodes-query.js.map +1 -0
  22. package/dist/db/nodes.js +32 -43
  23. package/dist/db/nodes.js.map +1 -1
  24. package/dist/internal-plugins/webpack-theme-component-shadowing/gatsby-node.js +30 -0
  25. package/dist/internal-plugins/webpack-theme-component-shadowing/gatsby-node.js.map +1 -0
  26. package/dist/internal-plugins/webpack-theme-component-shadowing/index.js +78 -0
  27. package/dist/internal-plugins/webpack-theme-component-shadowing/index.js.map +1 -0
  28. package/dist/internal-plugins/webpack-theme-component-shadowing/package.json +11 -0
  29. package/dist/redux/actions.js +2 -1
  30. package/dist/redux/actions.js.map +1 -1
  31. package/dist/redux/index.js +1 -1
  32. package/dist/redux/index.js.map +1 -1
  33. package/dist/redux/nodes.js +0 -34
  34. package/dist/redux/nodes.js.map +1 -1
  35. package/dist/redux/reducers/index.js +26 -1
  36. package/dist/redux/reducers/index.js.map +1 -1
  37. package/dist/redux/run-sift.js +8 -2
  38. package/dist/redux/run-sift.js.map +1 -1
  39. package/dist/schema/build-node-connections.js +2 -2
  40. package/dist/schema/build-node-connections.js.map +1 -1
  41. package/dist/schema/build-node-types.js +38 -16
  42. package/dist/schema/build-node-types.js.map +1 -1
  43. package/dist/schema/index.js +2 -2
  44. package/dist/schema/index.js.map +1 -1
  45. package/dist/schema/infer-graphql-input-fields.js +2 -1
  46. package/dist/schema/infer-graphql-input-fields.js.map +1 -1
  47. package/dist/schema/infer-graphql-type.js +29 -15
  48. package/dist/schema/infer-graphql-type.js.map +1 -1
  49. package/dist/schema/lazy-fields.js +74 -0
  50. package/dist/schema/lazy-fields.js.map +1 -0
  51. package/package.json +11 -10
package/CHANGELOG.md CHANGED
@@ -3,6 +3,34 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ <a name="2.0.59"></a>
7
+
8
+ ## [2.0.59](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.58...gatsby@2.0.59) (2018-11-29)
9
+
10
+ ### Features
11
+
12
+ - **gatsby:** add lokijs nodes db implementation ([#9919](https://github.com/gatsbyjs/gatsby/issues/9919)) ([4bcca2a](https://github.com/gatsbyjs/gatsby/commit/4bcca2a)), closes [#9338](https://github.com/gatsbyjs/gatsby/issues/9338)
13
+
14
+ <a name="2.0.58"></a>
15
+
16
+ ## [2.0.58](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.57...gatsby@2.0.58) (2018-11-29)
17
+
18
+ **Note:** Version bump only for package gatsby
19
+
20
+ <a name="2.0.57"></a>
21
+
22
+ ## [2.0.57](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.56...gatsby@2.0.57) (2018-11-28)
23
+
24
+ ### Bug Fixes
25
+
26
+ - **gatsby:** fix infinite reloads when resources fail ([#10141](https://github.com/gatsbyjs/gatsby/issues/10141)) ([9fc25f3](https://github.com/gatsbyjs/gatsby/commit/9fc25f3)), closes [#10074](https://github.com/gatsbyjs/gatsby/issues/10074)
27
+
28
+ <a name="2.0.56"></a>
29
+
30
+ ## [2.0.56](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.55...gatsby@2.0.56) (2018-11-27)
31
+
32
+ **Note:** Version bump only for package gatsby
33
+
6
34
  <a name="2.0.55"></a>
7
35
 
8
36
  ## [2.0.55](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.54...gatsby@2.0.55) (2018-11-22)
@@ -93,21 +93,52 @@ class EnsureResources extends _react.default.Component {
93
93
  return (0, _shallowCompare.default)(this, nextProps, nextState);
94
94
  }
95
95
 
96
- render() {
97
- // This should only occur if the network is offline, or if the
96
+ shouldRenderStaticHTML() {
97
+ const _window = window,
98
+ localStorage = _window.localStorage;
99
+ const _window$location = window.location,
100
+ href = _window$location.href,
101
+ pathname = _window$location.pathname; // This should only occur if the network is offline, or if the
98
102
  // path is nonexistent and there's no custom 404 page.
103
+
99
104
  if (process.env.NODE_ENV === `production` && !(this.state.pageResources && this.state.pageResources.json)) {
100
- // Do this, rather than simply `window.location.reload()`, so that
101
- // pressing the back/forward buttons work - otherwise Reach Router will
102
- // try to handle back/forward navigation, causing the URL to change but
103
- // the page displayed to stay the same.
104
- const originalUrl = new URL(location.href);
105
- window.history.replaceState({}, `404`, `${location.pathname}?gatsby-404`);
106
- window.location.replace(originalUrl);
107
- return null;
105
+ if (localStorage.getItem(`___failedResources`) === pathname) {
106
+ // Maybe it will work again in the future, so remove the flag
107
+ localStorage.removeItem(`___failedResources`);
108
+ console.error(`WARNING: Resources cannot be loaded for the pathname ${pathname} - ` + `falling back to static HTML instead.\n` + `This is likely due to a bug in Gatsby, or misconfiguration in your project.`);
109
+ } else {
110
+ // Mark the pathname as failed
111
+ localStorage.setItem(`___failedResources`, pathname); // Reload the page.
112
+ // Do this, rather than simply `window.location.reload()`, so that
113
+ // pressing the back/forward buttons work - otherwise when pressing
114
+ // back, the browser will just change the URL and expect JS to handle
115
+ // the change, which won't always work since it might not be a Gatsby
116
+ // page.
117
+
118
+ const originalUrl = new URL(href);
119
+ window.history.replaceState({}, `404`, `${pathname}?gatsby-404`);
120
+ window.location.replace(originalUrl);
121
+ }
122
+
123
+ return true;
124
+ } else {
125
+ localStorage.removeItem(`___failedResources`);
126
+ return false;
108
127
  }
128
+ }
109
129
 
110
- return this.props.children(this.state);
130
+ render() {
131
+ // TODO: find a nicer way to do this (e.g. React Suspense)
132
+ if (this.shouldRenderStaticHTML()) {
133
+ const __html = document.getElementById(`___gatsby`).innerHTML;
134
+ return _react.default.createElement("div", {
135
+ dangerouslySetInnerHTML: {
136
+ __html
137
+ }
138
+ });
139
+ } else {
140
+ return this.props.children(this.state);
141
+ }
111
142
  }
112
143
 
113
144
  }
@@ -32,7 +32,6 @@ var _loader = _interopRequireWildcard(require("./loader"));
32
32
 
33
33
  var _ensureResources = _interopRequireDefault(require("./ensure-resources"));
34
34
 
35
- window.___emitter = _emitter.default;
36
35
  window.asyncRequires = _asyncRequires.default;
37
36
  window.___emitter = _emitter.default;
38
37
  window.___loader = _loader.default;
@@ -92,25 +92,54 @@ class EnsureResources extends React.Component {
92
92
  return shallowCompare(this, nextProps, nextState)
93
93
  }
94
94
 
95
- render() {
95
+ shouldRenderStaticHTML() {
96
+ const { localStorage } = window
97
+ const { href, pathname } = window.location
98
+
96
99
  // This should only occur if the network is offline, or if the
97
100
  // path is nonexistent and there's no custom 404 page.
98
101
  if (
99
102
  process.env.NODE_ENV === `production` &&
100
103
  !(this.state.pageResources && this.state.pageResources.json)
101
104
  ) {
102
- // Do this, rather than simply `window.location.reload()`, so that
103
- // pressing the back/forward buttons work - otherwise Reach Router will
104
- // try to handle back/forward navigation, causing the URL to change but
105
- // the page displayed to stay the same.
106
- const originalUrl = new URL(location.href)
107
- window.history.replaceState({}, `404`, `${location.pathname}?gatsby-404`)
108
- window.location.replace(originalUrl)
109
-
110
- return null
105
+ if (localStorage.getItem(`___failedResources`) === pathname) {
106
+ // Maybe it will work again in the future, so remove the flag
107
+ localStorage.removeItem(`___failedResources`)
108
+ console.error(
109
+ `WARNING: Resources cannot be loaded for the pathname ${pathname} - ` +
110
+ `falling back to static HTML instead.\n` +
111
+ `This is likely due to a bug in Gatsby, or misconfiguration in your project.`
112
+ )
113
+ } else {
114
+ // Mark the pathname as failed
115
+ localStorage.setItem(`___failedResources`, pathname)
116
+
117
+ // Reload the page.
118
+ // Do this, rather than simply `window.location.reload()`, so that
119
+ // pressing the back/forward buttons work - otherwise when pressing
120
+ // back, the browser will just change the URL and expect JS to handle
121
+ // the change, which won't always work since it might not be a Gatsby
122
+ // page.
123
+ const originalUrl = new URL(href)
124
+ window.history.replaceState({}, `404`, `${pathname}?gatsby-404`)
125
+ window.location.replace(originalUrl)
126
+ }
127
+
128
+ return true
129
+ } else {
130
+ localStorage.removeItem(`___failedResources`)
131
+ return false
111
132
  }
133
+ }
112
134
 
113
- return this.props.children(this.state)
135
+ render() {
136
+ // TODO: find a nicer way to do this (e.g. React Suspense)
137
+ if (this.shouldRenderStaticHTML()) {
138
+ const __html = document.getElementById(`___gatsby`).innerHTML
139
+ return <div dangerouslySetInnerHTML={{ __html }} />
140
+ } else {
141
+ return this.props.children(this.state)
142
+ }
114
143
  }
115
144
  }
116
145
 
@@ -11,7 +11,6 @@ import {
11
11
  RouteUpdates,
12
12
  } from "./navigation"
13
13
  import emitter from "./emitter"
14
- window.___emitter = emitter
15
14
  import PageRenderer from "./page-renderer"
16
15
  import asyncRequires from "./async-requires"
17
16
  import loader, { setApiRunnerForLoader } from "./loader"
@@ -43,7 +43,9 @@ const getConfigFile = require(`./get-config-file`);
43
43
 
44
44
  const tracer = require(`opentracing`).globalTracer();
45
45
 
46
- const preferDefault = require(`./prefer-default`); // Show stack trace on unhandled promises.
46
+ const preferDefault = require(`./prefer-default`);
47
+
48
+ const nodeTracking = require(`../db/node-tracking`); // Show stack trace on unhandled promises.
47
49
 
48
50
 
49
51
  process.on(`unhandledRejection`, (reason, p) => {
@@ -212,7 +214,34 @@ function () {
212
214
  yield fs.ensureDir(`${program.directory}/.cache`); // Ensure the public/static directory
213
215
 
214
216
  yield fs.ensureDir(`${program.directory}/public/static`);
215
- activity.end(); // Copy our site files to the root of the site.
217
+ activity.end();
218
+
219
+ if (process.env.GATSBY_DB_NODES === `loki`) {
220
+ const loki = require(`../db/loki`); // Start the nodes database (in memory loki js with interval disk
221
+ // saves). If data was saved from a previous build, it will be
222
+ // loaded here
223
+
224
+
225
+ activity = report.activityTimer(`start nodes db`, {
226
+ parentSpan: bootstrapSpan
227
+ });
228
+ activity.start();
229
+ const dbSaveFile = `${program.directory}/.cache/loki/loki.db`;
230
+
231
+ try {
232
+ yield loki.start({
233
+ saveFile: dbSaveFile
234
+ });
235
+ } catch (e) {
236
+ report.error(`Error starting DB. Perhaps try deleting ${path.dirname(dbSaveFile)}`);
237
+ }
238
+
239
+ activity.end();
240
+ } // By now, our nodes database has been loaded, so ensure that we
241
+ // have tracked all inline objects
242
+
243
+
244
+ nodeTracking.trackDbNodes(); // Copy our site files to the root of the site.
216
245
 
217
246
  activity = report.activityTimer(`copy gatsby files`, {
218
247
  parentSpan: bootstrapSpan
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bootstrap/index.js"],"names":["_","require","slash","fs","md5File","crypto","del","path","convertHrtime","Promise","apiRunnerNode","mergeGatsbyConfig","getBrowserslist","graphql","store","emitter","loadPlugins","report","getConfigFile","tracer","globalTracer","preferDefault","process","on","reason","p","panic","extractQueries","runInitialQueries","queryQueue","writePages","writeRedirects","module","exports","args","spanArgs","parentSpan","childOf","bootstrapSpan","startSpan","directory","program","browserslist","dispatch","type","payload","activity","activityTimer","start","config","__experimentalThemes","themesConfig","mapSeries","plugin","themeName","resolve","themeConfig","options","theme","themeConfigObj","isFunction","plugins","reduce","polyfill","warn","end","flattenedPlugins","span","pluginVersions","map","version","hashes","all","catch","pluginsHash","createHash","update","JSON","stringify","concat","digest","state","getState","oldPluginsHash","status","PLUGINS_HASH","info","stripIndent","remove","e","error","ensureDir","srcDir","__dirname","siteDir","tryRequire","copy","clobber","ensureDirSync","emptyDir","err","hasAPIFile","env","skipSSR","undefined","envAPIs","name","join","Array","isArray","length","ssrPlugins","filter","pluginOptions","browserPlugins","browserPluginsRequires","browserAPIRunner","sSRAPIRunner","readFileSync","ssrPluginsRequires","writeFileSync","build","extensions","apiResults","traceId","flattenDeep","graphqlRunner","query","context","schema","waitForCascadingActions","printConflicts","NODE_ENV","startQueries","hrtime","stats","getStats","setStatus","total","peak","seconds","toFixed","checkJobsDone","debounce","jobs","active","log","uptime","then","finish","emit"],"mappings":"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","sourcesContent":["/* @flow */\n\nconst _ = require(`lodash`)\nconst slash = require(`slash`)\nconst fs = require(`fs-extra`)\nconst md5File = require(`md5-file/promise`)\nconst crypto = require(`crypto`)\nconst del = require(`del`)\nconst path = require(`path`)\nconst convertHrtime = require(`convert-hrtime`)\nconst Promise = require(`bluebird`)\n\nconst apiRunnerNode = require(`../utils/api-runner-node`)\nconst mergeGatsbyConfig = require(`../utils/merge-gatsby-config`)\nconst getBrowserslist = require(`../utils/browserslist`)\nconst { graphql } = require(`graphql`)\nconst { store, emitter } = require(`../redux`)\nconst loadPlugins = require(`./load-plugins`)\nconst report = require(`gatsby-cli/lib/reporter`)\nconst getConfigFile = require(`./get-config-file`)\nconst tracer = require(`opentracing`).globalTracer()\nconst preferDefault = require(`./prefer-default`)\n\n// Show stack trace on unhandled promises.\nprocess.on(`unhandledRejection`, (reason, p) => {\n report.panic(reason)\n})\n\nconst {\n extractQueries,\n} = require(`../internal-plugins/query-runner/query-watcher`)\nconst {\n runInitialQueries,\n} = require(`../internal-plugins/query-runner/page-query-runner`)\nconst queryQueue = require(`../internal-plugins/query-runner/query-queue`)\nconst { writePages } = require(`../internal-plugins/query-runner/pages-writer`)\nconst {\n writeRedirects,\n} = require(`../internal-plugins/query-runner/redirects-writer`)\n\n// Override console.log to add the source file + line number.\n// Useful for debugging if you lose a console.log somewhere.\n// Otherwise leave commented out.\n// require(`./log-line-function`)\n\ntype BootstrapArgs = {\n directory: string,\n prefixPaths?: boolean,\n parentSpan: Object,\n}\n\nmodule.exports = async (args: BootstrapArgs) => {\n const spanArgs = args.parentSpan ? { childOf: args.parentSpan } : {}\n const bootstrapSpan = tracer.startSpan(`bootstrap`, spanArgs)\n\n // Start plugin runner which listens to the store\n // and invokes Gatsby API based on actions.\n require(`../redux/plugin-runner`)\n\n const directory = slash(args.directory)\n\n const program = {\n ...args,\n browserslist: getBrowserslist(directory),\n // Fix program directory path for windows env.\n directory,\n }\n\n store.dispatch({\n type: `SET_PROGRAM`,\n payload: program,\n })\n\n // Try opening the site's gatsby-config.js file.\n let activity = report.activityTimer(`open and validate gatsby-configs`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n let config = await preferDefault(\n getConfigFile(program.directory, `gatsby-config`)\n )\n\n // theme gatsby configs can be functions or objects\n if (config && config.__experimentalThemes) {\n const themesConfig = await Promise.mapSeries(\n config.__experimentalThemes,\n async plugin => {\n const themeName = plugin.resolve || plugin\n const themeConfig = plugin.options || {}\n const theme = await preferDefault(\n getConfigFile(themeName, `gatsby-config`)\n )\n // if theme is a function, call it with the themeConfig\n let themeConfigObj = theme\n if (_.isFunction(theme)) {\n themeConfigObj = theme(themeConfig)\n }\n // themes function as plugins too (gatsby-node, etc)\n return {\n ...themeConfigObj,\n plugins: [\n ...(themeConfigObj.plugins || []),\n // theme plugin is last so it's gatsby-node, etc can override it's declared plugins, like a normal site.\n { resolve: themeName, options: themeConfig },\n ],\n }\n }\n ).reduce(mergeGatsbyConfig, {})\n\n config = mergeGatsbyConfig(themesConfig, config)\n }\n\n if (config && config.polyfill) {\n report.warn(\n `Support for custom Promise polyfills has been removed in Gatsby v2. We only support Babel 7's new automatic polyfilling behavior.`\n )\n }\n\n store.dispatch({\n type: `SET_SITE_CONFIG`,\n payload: config,\n })\n\n activity.end()\n\n activity = report.activityTimer(`load plugins`)\n activity.start()\n const flattenedPlugins = await loadPlugins(config)\n activity.end()\n\n // onPreInit\n activity = report.activityTimer(`onPreInit`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`onPreInit`, { parentSpan: activity.span })\n activity.end()\n\n // Delete html and css files from the public directory as we don't want\n // deleted pages and styles from previous builds to stick around.\n activity = report.activityTimer(\n `delete html and css files from previous builds`,\n {\n parentSpan: bootstrapSpan,\n }\n )\n activity.start()\n await del([\n `public/*.{html,css}`,\n `public/**/*.{html,css}`,\n `!public/static`,\n `!public/static/**/*.{html,css}`,\n ])\n activity.end()\n\n activity = report.activityTimer(`initialize cache`)\n activity.start()\n // Check if any plugins have been updated since our last run. If so\n // we delete the cache is there's likely been changes\n // since the previous run.\n //\n // We do this by creating a hash of all the version numbers of installed\n // plugins, the site's package.json, gatsby-config.js, and gatsby-node.js.\n // The last, gatsby-node.js, is important as many gatsby sites put important\n // logic in there e.g. generating slugs for custom pages.\n const pluginVersions = flattenedPlugins.map(p => p.version)\n const hashes = await Promise.all([\n md5File(`package.json`),\n Promise.resolve(\n md5File(`${program.directory}/gatsby-config.js`).catch(() => {})\n ), // ignore as this file isn't required),\n Promise.resolve(\n md5File(`${program.directory}/gatsby-node.js`).catch(() => {})\n ), // ignore as this file isn't required),\n ])\n const pluginsHash = crypto\n .createHash(`md5`)\n .update(JSON.stringify(pluginVersions.concat(hashes)))\n .digest(`hex`)\n let state = store.getState()\n const oldPluginsHash = state && state.status ? state.status.PLUGINS_HASH : ``\n\n // Check if anything has changed. If it has, delete the site's .cache\n // directory and tell reducers to empty themselves.\n //\n // Also if the hash isn't there, then delete things just in case something\n // is weird.\n if (oldPluginsHash && pluginsHash !== oldPluginsHash) {\n report.info(report.stripIndent`\n One or more of your plugins have changed since the last time you ran Gatsby. As\n a precaution, we're deleting your site's cache to ensure there's not any stale\n data\n `)\n }\n\n if (!oldPluginsHash || pluginsHash !== oldPluginsHash) {\n try {\n await fs.remove(`${program.directory}/.cache`)\n } catch (e) {\n report.error(`Failed to remove .cache files.`, e)\n }\n // Tell reducers to delete their data (the store will already have\n // been loaded from the file system cache).\n store.dispatch({\n type: `DELETE_CACHE`,\n })\n }\n\n // Update the store with the new plugins hash.\n store.dispatch({\n type: `UPDATE_PLUGINS_HASH`,\n payload: pluginsHash,\n })\n\n // Now that we know the .cache directory is safe, initialize the cache\n // directory.\n await fs.ensureDir(`${program.directory}/.cache`)\n\n // Ensure the public/static directory\n await fs.ensureDir(`${program.directory}/public/static`)\n\n activity.end()\n\n // Copy our site files to the root of the site.\n activity = report.activityTimer(`copy gatsby files`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n const srcDir = `${__dirname}/../../cache-dir`\n const siteDir = `${program.directory}/.cache`\n const tryRequire = `${__dirname}/../utils/test-require-error.js`\n try {\n await fs.copy(srcDir, siteDir, {\n clobber: true,\n })\n await fs.copy(tryRequire, `${siteDir}/test-require-error.js`, {\n clobber: true,\n })\n await fs.ensureDirSync(`${program.directory}/.cache/json`)\n\n // Ensure .cache/fragments exists and is empty. We want fragments to be\n // added on every run in response to data as fragments can only be added if\n // the data used to create the schema they're dependent on is available.\n await fs.emptyDir(`${program.directory}/.cache/fragments`)\n } catch (err) {\n report.panic(`Unable to copy site files to .cache`, err)\n }\n\n // Find plugins which implement gatsby-browser and gatsby-ssr and write\n // out api-runners for them.\n const hasAPIFile = (env, plugin) => {\n // The plugin loader has disabled SSR APIs for this plugin. Usually due to\n // multiple implementations of an API that can only be implemented once\n if (env === `ssr` && plugin.skipSSR === true) return undefined\n\n const envAPIs = plugin[`${env}APIs`]\n\n // Always include the site's gatsby-browser.js if it exists as it's\n // a handy place to include global styles and other global imports.\n try {\n if (env === `browser` && plugin.name === `default-site-plugin`) {\n return slash(\n require.resolve(path.join(plugin.resolve, `gatsby-${env}`))\n )\n }\n } catch (e) {\n // ignore\n }\n\n if (envAPIs && Array.isArray(envAPIs) && envAPIs.length > 0) {\n return slash(path.join(plugin.resolve, `gatsby-${env}`))\n }\n return undefined\n }\n\n const ssrPlugins = _.filter(\n flattenedPlugins.map(plugin => {\n return {\n resolve: hasAPIFile(`ssr`, plugin),\n options: plugin.pluginOptions,\n }\n }),\n plugin => plugin.resolve\n )\n\n const browserPlugins = _.filter(\n flattenedPlugins.map(plugin => {\n return {\n resolve: hasAPIFile(`browser`, plugin),\n options: plugin.pluginOptions,\n }\n }),\n plugin => plugin.resolve\n )\n\n const browserPluginsRequires = browserPlugins\n .map(\n plugin =>\n `{\n plugin: require('${plugin.resolve}'),\n options: ${JSON.stringify(plugin.options)},\n }`\n )\n .join(`,`)\n\n const browserAPIRunner = `module.exports = [${browserPluginsRequires}]\\n`\n\n let sSRAPIRunner = ``\n\n try {\n sSRAPIRunner = fs.readFileSync(`${siteDir}/api-runner-ssr.js`, `utf-8`)\n } catch (err) {\n report.panic(`Failed to read ${siteDir}/api-runner-ssr.js`, err)\n }\n\n const ssrPluginsRequires = ssrPlugins\n .map(\n plugin =>\n `{\n plugin: require('${plugin.resolve}'),\n options: ${JSON.stringify(plugin.options)},\n }`\n )\n .join(`,`)\n sSRAPIRunner = `var plugins = [${ssrPluginsRequires}]\\n${sSRAPIRunner}`\n\n fs.writeFileSync(\n `${siteDir}/api-runner-browser-plugins.js`,\n browserAPIRunner,\n `utf-8`\n )\n fs.writeFileSync(`${siteDir}/api-runner-ssr.js`, sSRAPIRunner, `utf-8`)\n\n activity.end()\n /**\n * Start the main bootstrap processes.\n */\n\n // onPreBootstrap\n activity = report.activityTimer(`onPreBootstrap`)\n activity.start()\n await apiRunnerNode(`onPreBootstrap`)\n activity.end()\n\n // Source nodes\n activity = report.activityTimer(`source and transform nodes`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await require(`../utils/source-nodes`)({ parentSpan: activity.span })\n activity.end()\n\n // Create Schema.\n activity = report.activityTimer(`building schema`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await require(`../schema`).build({ parentSpan: activity.span })\n activity.end()\n\n // Collect resolvable extensions and attach to program.\n const extensions = [`.mjs`, `.js`, `.jsx`, `.wasm`, `.json`]\n // Change to this being an action and plugins implement `onPreBootstrap`\n // for adding extensions.\n const apiResults = await apiRunnerNode(`resolvableExtensions`, {\n traceId: `initial-resolvableExtensions`,\n parentSpan: bootstrapSpan,\n })\n\n store.dispatch({\n type: `SET_PROGRAM_EXTENSIONS`,\n payload: _.flattenDeep([extensions, apiResults]),\n })\n\n const graphqlRunner = (query, context = {}) => {\n const schema = store.getState().schema\n return graphql(schema, query, context, context, context)\n }\n\n // Collect pages.\n activity = report.activityTimer(`createPages`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`createPages`, {\n graphql: graphqlRunner,\n traceId: `initial-createPages`,\n waitForCascadingActions: true,\n parentSpan: activity.span,\n })\n activity.end()\n\n // A variant on createPages for plugins that want to\n // have full control over adding/removing pages. The normal\n // \"createPages\" API is called every time (during development)\n // that data changes.\n activity = report.activityTimer(`createPagesStatefully`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`createPagesStatefully`, {\n graphql: graphqlRunner,\n traceId: `initial-createPagesStatefully`,\n waitForCascadingActions: true,\n parentSpan: activity.span,\n })\n activity.end()\n\n activity = report.activityTimer(`onPreExtractQueries`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`onPreExtractQueries`, { parentSpan: activity.span })\n activity.end()\n\n // Update Schema for SitePage.\n activity = report.activityTimer(`update schema`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await require(`../schema`).build({ parentSpan: activity.span })\n activity.end()\n\n require(`../schema/type-conflict-reporter`).printConflicts()\n\n // Extract queries\n activity = report.activityTimer(`extract queries from components`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await extractQueries()\n activity.end()\n\n // Start the createPages hot reloader.\n if (process.env.NODE_ENV !== `production`) {\n require(`./page-hot-reloader`)(graphqlRunner)\n }\n\n // Run queries\n activity = report.activityTimer(`run graphql queries`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n const startQueries = process.hrtime()\n queryQueue.on(`task_finish`, () => {\n const stats = queryQueue.getStats()\n activity.setStatus(\n `${stats.total}/${stats.peak} ${(\n stats.total / convertHrtime(process.hrtime(startQueries)).seconds\n ).toFixed(2)} queries/second`\n )\n })\n await runInitialQueries(activity)\n activity.end()\n\n // Write out files.\n activity = report.activityTimer(`write out page data`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n try {\n await writePages()\n } catch (err) {\n report.panic(`Failed to write out page data`, err)\n }\n activity.end()\n\n // Write out redirects.\n activity = report.activityTimer(`write out redirect data`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await writeRedirects()\n activity.end()\n\n const checkJobsDone = _.debounce(resolve => {\n const state = store.getState()\n if (state.jobs.active.length === 0) {\n report.log(``)\n report.info(`bootstrap finished - ${process.uptime()} s`)\n report.log(``)\n\n // onPostBootstrap\n activity = report.activityTimer(`onPostBootstrap`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n apiRunnerNode(`onPostBootstrap`, { parentSpan: activity.span }).then(\n () => {\n activity.end()\n bootstrapSpan.finish()\n resolve({ graphqlRunner })\n }\n )\n }\n }, 100)\n\n if (store.getState().jobs.active.length === 0) {\n // onPostBootstrap\n activity = report.activityTimer(`onPostBootstrap`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`onPostBootstrap`, { parentSpan: activity.span })\n activity.end()\n\n bootstrapSpan.finish()\n\n report.log(``)\n report.info(`bootstrap finished - ${process.uptime()} s`)\n report.log(``)\n emitter.emit(`BOOTSTRAP_FINISHED`)\n return {\n graphqlRunner,\n }\n } else {\n return new Promise(resolve => {\n // Wait until all side effect jobs are finished.\n emitter.on(`END_JOB`, () => checkJobsDone(resolve))\n })\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/bootstrap/index.js"],"names":["_","require","slash","fs","md5File","crypto","del","path","convertHrtime","Promise","apiRunnerNode","mergeGatsbyConfig","getBrowserslist","graphql","store","emitter","loadPlugins","report","getConfigFile","tracer","globalTracer","preferDefault","nodeTracking","process","on","reason","p","panic","extractQueries","runInitialQueries","queryQueue","writePages","writeRedirects","module","exports","args","spanArgs","parentSpan","childOf","bootstrapSpan","startSpan","directory","program","browserslist","dispatch","type","payload","activity","activityTimer","start","config","__experimentalThemes","themesConfig","mapSeries","plugin","themeName","resolve","themeConfig","options","theme","themeConfigObj","isFunction","plugins","reduce","polyfill","warn","end","flattenedPlugins","span","pluginVersions","map","version","hashes","all","catch","pluginsHash","createHash","update","JSON","stringify","concat","digest","state","getState","oldPluginsHash","status","PLUGINS_HASH","info","stripIndent","remove","e","error","ensureDir","env","GATSBY_DB_NODES","loki","dbSaveFile","saveFile","dirname","trackDbNodes","srcDir","__dirname","siteDir","tryRequire","copy","clobber","ensureDirSync","emptyDir","err","hasAPIFile","skipSSR","undefined","envAPIs","name","join","Array","isArray","length","ssrPlugins","filter","pluginOptions","browserPlugins","browserPluginsRequires","browserAPIRunner","sSRAPIRunner","readFileSync","ssrPluginsRequires","writeFileSync","build","extensions","apiResults","traceId","flattenDeep","graphqlRunner","query","context","schema","waitForCascadingActions","printConflicts","NODE_ENV","startQueries","hrtime","stats","getStats","setStatus","total","peak","seconds","toFixed","checkJobsDone","debounce","jobs","active","log","uptime","then","finish","emit"],"mappings":"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","sourcesContent":["/* @flow */\n\nconst _ = require(`lodash`)\nconst slash = require(`slash`)\nconst fs = require(`fs-extra`)\nconst md5File = require(`md5-file/promise`)\nconst crypto = require(`crypto`)\nconst del = require(`del`)\nconst path = require(`path`)\nconst convertHrtime = require(`convert-hrtime`)\nconst Promise = require(`bluebird`)\n\nconst apiRunnerNode = require(`../utils/api-runner-node`)\nconst mergeGatsbyConfig = require(`../utils/merge-gatsby-config`)\nconst getBrowserslist = require(`../utils/browserslist`)\nconst { graphql } = require(`graphql`)\nconst { store, emitter } = require(`../redux`)\nconst loadPlugins = require(`./load-plugins`)\nconst report = require(`gatsby-cli/lib/reporter`)\nconst getConfigFile = require(`./get-config-file`)\nconst tracer = require(`opentracing`).globalTracer()\nconst preferDefault = require(`./prefer-default`)\nconst nodeTracking = require(`../db/node-tracking`)\n\n// Show stack trace on unhandled promises.\nprocess.on(`unhandledRejection`, (reason, p) => {\n report.panic(reason)\n})\n\nconst {\n extractQueries,\n} = require(`../internal-plugins/query-runner/query-watcher`)\nconst {\n runInitialQueries,\n} = require(`../internal-plugins/query-runner/page-query-runner`)\nconst queryQueue = require(`../internal-plugins/query-runner/query-queue`)\nconst { writePages } = require(`../internal-plugins/query-runner/pages-writer`)\nconst {\n writeRedirects,\n} = require(`../internal-plugins/query-runner/redirects-writer`)\n\n// Override console.log to add the source file + line number.\n// Useful for debugging if you lose a console.log somewhere.\n// Otherwise leave commented out.\n// require(`./log-line-function`)\n\ntype BootstrapArgs = {\n directory: string,\n prefixPaths?: boolean,\n parentSpan: Object,\n}\n\nmodule.exports = async (args: BootstrapArgs) => {\n const spanArgs = args.parentSpan ? { childOf: args.parentSpan } : {}\n const bootstrapSpan = tracer.startSpan(`bootstrap`, spanArgs)\n\n // Start plugin runner which listens to the store\n // and invokes Gatsby API based on actions.\n require(`../redux/plugin-runner`)\n\n const directory = slash(args.directory)\n\n const program = {\n ...args,\n browserslist: getBrowserslist(directory),\n // Fix program directory path for windows env.\n directory,\n }\n\n store.dispatch({\n type: `SET_PROGRAM`,\n payload: program,\n })\n\n // Try opening the site's gatsby-config.js file.\n let activity = report.activityTimer(`open and validate gatsby-configs`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n let config = await preferDefault(\n getConfigFile(program.directory, `gatsby-config`)\n )\n\n // theme gatsby configs can be functions or objects\n if (config && config.__experimentalThemes) {\n const themesConfig = await Promise.mapSeries(\n config.__experimentalThemes,\n async plugin => {\n const themeName = plugin.resolve || plugin\n const themeConfig = plugin.options || {}\n const theme = await preferDefault(\n getConfigFile(themeName, `gatsby-config`)\n )\n // if theme is a function, call it with the themeConfig\n let themeConfigObj = theme\n if (_.isFunction(theme)) {\n themeConfigObj = theme(themeConfig)\n }\n // themes function as plugins too (gatsby-node, etc)\n return {\n ...themeConfigObj,\n plugins: [\n ...(themeConfigObj.plugins || []),\n // theme plugin is last so it's gatsby-node, etc can override it's declared plugins, like a normal site.\n { resolve: themeName, options: themeConfig },\n ],\n }\n }\n ).reduce(mergeGatsbyConfig, {})\n\n config = mergeGatsbyConfig(themesConfig, config)\n }\n\n if (config && config.polyfill) {\n report.warn(\n `Support for custom Promise polyfills has been removed in Gatsby v2. We only support Babel 7's new automatic polyfilling behavior.`\n )\n }\n\n store.dispatch({\n type: `SET_SITE_CONFIG`,\n payload: config,\n })\n\n activity.end()\n\n activity = report.activityTimer(`load plugins`)\n activity.start()\n const flattenedPlugins = await loadPlugins(config)\n activity.end()\n\n // onPreInit\n activity = report.activityTimer(`onPreInit`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`onPreInit`, { parentSpan: activity.span })\n activity.end()\n\n // Delete html and css files from the public directory as we don't want\n // deleted pages and styles from previous builds to stick around.\n activity = report.activityTimer(\n `delete html and css files from previous builds`,\n {\n parentSpan: bootstrapSpan,\n }\n )\n activity.start()\n await del([\n `public/*.{html,css}`,\n `public/**/*.{html,css}`,\n `!public/static`,\n `!public/static/**/*.{html,css}`,\n ])\n activity.end()\n\n activity = report.activityTimer(`initialize cache`)\n activity.start()\n // Check if any plugins have been updated since our last run. If so\n // we delete the cache is there's likely been changes\n // since the previous run.\n //\n // We do this by creating a hash of all the version numbers of installed\n // plugins, the site's package.json, gatsby-config.js, and gatsby-node.js.\n // The last, gatsby-node.js, is important as many gatsby sites put important\n // logic in there e.g. generating slugs for custom pages.\n const pluginVersions = flattenedPlugins.map(p => p.version)\n const hashes = await Promise.all([\n md5File(`package.json`),\n Promise.resolve(\n md5File(`${program.directory}/gatsby-config.js`).catch(() => {})\n ), // ignore as this file isn't required),\n Promise.resolve(\n md5File(`${program.directory}/gatsby-node.js`).catch(() => {})\n ), // ignore as this file isn't required),\n ])\n const pluginsHash = crypto\n .createHash(`md5`)\n .update(JSON.stringify(pluginVersions.concat(hashes)))\n .digest(`hex`)\n let state = store.getState()\n const oldPluginsHash = state && state.status ? state.status.PLUGINS_HASH : ``\n\n // Check if anything has changed. If it has, delete the site's .cache\n // directory and tell reducers to empty themselves.\n //\n // Also if the hash isn't there, then delete things just in case something\n // is weird.\n if (oldPluginsHash && pluginsHash !== oldPluginsHash) {\n report.info(report.stripIndent`\n One or more of your plugins have changed since the last time you ran Gatsby. As\n a precaution, we're deleting your site's cache to ensure there's not any stale\n data\n `)\n }\n\n if (!oldPluginsHash || pluginsHash !== oldPluginsHash) {\n try {\n await fs.remove(`${program.directory}/.cache`)\n } catch (e) {\n report.error(`Failed to remove .cache files.`, e)\n }\n // Tell reducers to delete their data (the store will already have\n // been loaded from the file system cache).\n store.dispatch({\n type: `DELETE_CACHE`,\n })\n }\n\n // Update the store with the new plugins hash.\n store.dispatch({\n type: `UPDATE_PLUGINS_HASH`,\n payload: pluginsHash,\n })\n\n // Now that we know the .cache directory is safe, initialize the cache\n // directory.\n await fs.ensureDir(`${program.directory}/.cache`)\n\n // Ensure the public/static directory\n await fs.ensureDir(`${program.directory}/public/static`)\n\n activity.end()\n\n if (process.env.GATSBY_DB_NODES === `loki`) {\n const loki = require(`../db/loki`)\n // Start the nodes database (in memory loki js with interval disk\n // saves). If data was saved from a previous build, it will be\n // loaded here\n activity = report.activityTimer(`start nodes db`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n const dbSaveFile = `${program.directory}/.cache/loki/loki.db`\n try {\n await loki.start({\n saveFile: dbSaveFile,\n })\n } catch (e) {\n report.error(\n `Error starting DB. Perhaps try deleting ${path.dirname(dbSaveFile)}`\n )\n }\n activity.end()\n }\n\n // By now, our nodes database has been loaded, so ensure that we\n // have tracked all inline objects\n nodeTracking.trackDbNodes()\n\n // Copy our site files to the root of the site.\n activity = report.activityTimer(`copy gatsby files`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n const srcDir = `${__dirname}/../../cache-dir`\n const siteDir = `${program.directory}/.cache`\n const tryRequire = `${__dirname}/../utils/test-require-error.js`\n try {\n await fs.copy(srcDir, siteDir, {\n clobber: true,\n })\n await fs.copy(tryRequire, `${siteDir}/test-require-error.js`, {\n clobber: true,\n })\n await fs.ensureDirSync(`${program.directory}/.cache/json`)\n\n // Ensure .cache/fragments exists and is empty. We want fragments to be\n // added on every run in response to data as fragments can only be added if\n // the data used to create the schema they're dependent on is available.\n await fs.emptyDir(`${program.directory}/.cache/fragments`)\n } catch (err) {\n report.panic(`Unable to copy site files to .cache`, err)\n }\n\n // Find plugins which implement gatsby-browser and gatsby-ssr and write\n // out api-runners for them.\n const hasAPIFile = (env, plugin) => {\n // The plugin loader has disabled SSR APIs for this plugin. Usually due to\n // multiple implementations of an API that can only be implemented once\n if (env === `ssr` && plugin.skipSSR === true) return undefined\n\n const envAPIs = plugin[`${env}APIs`]\n\n // Always include the site's gatsby-browser.js if it exists as it's\n // a handy place to include global styles and other global imports.\n try {\n if (env === `browser` && plugin.name === `default-site-plugin`) {\n return slash(\n require.resolve(path.join(plugin.resolve, `gatsby-${env}`))\n )\n }\n } catch (e) {\n // ignore\n }\n\n if (envAPIs && Array.isArray(envAPIs) && envAPIs.length > 0) {\n return slash(path.join(plugin.resolve, `gatsby-${env}`))\n }\n return undefined\n }\n\n const ssrPlugins = _.filter(\n flattenedPlugins.map(plugin => {\n return {\n resolve: hasAPIFile(`ssr`, plugin),\n options: plugin.pluginOptions,\n }\n }),\n plugin => plugin.resolve\n )\n\n const browserPlugins = _.filter(\n flattenedPlugins.map(plugin => {\n return {\n resolve: hasAPIFile(`browser`, plugin),\n options: plugin.pluginOptions,\n }\n }),\n plugin => plugin.resolve\n )\n\n const browserPluginsRequires = browserPlugins\n .map(\n plugin =>\n `{\n plugin: require('${plugin.resolve}'),\n options: ${JSON.stringify(plugin.options)},\n }`\n )\n .join(`,`)\n\n const browserAPIRunner = `module.exports = [${browserPluginsRequires}]\\n`\n\n let sSRAPIRunner = ``\n\n try {\n sSRAPIRunner = fs.readFileSync(`${siteDir}/api-runner-ssr.js`, `utf-8`)\n } catch (err) {\n report.panic(`Failed to read ${siteDir}/api-runner-ssr.js`, err)\n }\n\n const ssrPluginsRequires = ssrPlugins\n .map(\n plugin =>\n `{\n plugin: require('${plugin.resolve}'),\n options: ${JSON.stringify(plugin.options)},\n }`\n )\n .join(`,`)\n sSRAPIRunner = `var plugins = [${ssrPluginsRequires}]\\n${sSRAPIRunner}`\n\n fs.writeFileSync(\n `${siteDir}/api-runner-browser-plugins.js`,\n browserAPIRunner,\n `utf-8`\n )\n fs.writeFileSync(`${siteDir}/api-runner-ssr.js`, sSRAPIRunner, `utf-8`)\n\n activity.end()\n /**\n * Start the main bootstrap processes.\n */\n\n // onPreBootstrap\n activity = report.activityTimer(`onPreBootstrap`)\n activity.start()\n await apiRunnerNode(`onPreBootstrap`)\n activity.end()\n\n // Source nodes\n activity = report.activityTimer(`source and transform nodes`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await require(`../utils/source-nodes`)({ parentSpan: activity.span })\n activity.end()\n\n // Create Schema.\n activity = report.activityTimer(`building schema`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await require(`../schema`).build({ parentSpan: activity.span })\n activity.end()\n\n // Collect resolvable extensions and attach to program.\n const extensions = [`.mjs`, `.js`, `.jsx`, `.wasm`, `.json`]\n // Change to this being an action and plugins implement `onPreBootstrap`\n // for adding extensions.\n const apiResults = await apiRunnerNode(`resolvableExtensions`, {\n traceId: `initial-resolvableExtensions`,\n parentSpan: bootstrapSpan,\n })\n\n store.dispatch({\n type: `SET_PROGRAM_EXTENSIONS`,\n payload: _.flattenDeep([extensions, apiResults]),\n })\n\n const graphqlRunner = (query, context = {}) => {\n const schema = store.getState().schema\n return graphql(schema, query, context, context, context)\n }\n\n // Collect pages.\n activity = report.activityTimer(`createPages`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`createPages`, {\n graphql: graphqlRunner,\n traceId: `initial-createPages`,\n waitForCascadingActions: true,\n parentSpan: activity.span,\n })\n activity.end()\n\n // A variant on createPages for plugins that want to\n // have full control over adding/removing pages. The normal\n // \"createPages\" API is called every time (during development)\n // that data changes.\n activity = report.activityTimer(`createPagesStatefully`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`createPagesStatefully`, {\n graphql: graphqlRunner,\n traceId: `initial-createPagesStatefully`,\n waitForCascadingActions: true,\n parentSpan: activity.span,\n })\n activity.end()\n\n activity = report.activityTimer(`onPreExtractQueries`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`onPreExtractQueries`, { parentSpan: activity.span })\n activity.end()\n\n // Update Schema for SitePage.\n activity = report.activityTimer(`update schema`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await require(`../schema`).build({ parentSpan: activity.span })\n activity.end()\n\n require(`../schema/type-conflict-reporter`).printConflicts()\n\n // Extract queries\n activity = report.activityTimer(`extract queries from components`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await extractQueries()\n activity.end()\n\n // Start the createPages hot reloader.\n if (process.env.NODE_ENV !== `production`) {\n require(`./page-hot-reloader`)(graphqlRunner)\n }\n\n // Run queries\n activity = report.activityTimer(`run graphql queries`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n const startQueries = process.hrtime()\n queryQueue.on(`task_finish`, () => {\n const stats = queryQueue.getStats()\n activity.setStatus(\n `${stats.total}/${stats.peak} ${(\n stats.total / convertHrtime(process.hrtime(startQueries)).seconds\n ).toFixed(2)} queries/second`\n )\n })\n await runInitialQueries(activity)\n activity.end()\n\n // Write out files.\n activity = report.activityTimer(`write out page data`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n try {\n await writePages()\n } catch (err) {\n report.panic(`Failed to write out page data`, err)\n }\n activity.end()\n\n // Write out redirects.\n activity = report.activityTimer(`write out redirect data`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await writeRedirects()\n activity.end()\n\n const checkJobsDone = _.debounce(resolve => {\n const state = store.getState()\n if (state.jobs.active.length === 0) {\n report.log(``)\n report.info(`bootstrap finished - ${process.uptime()} s`)\n report.log(``)\n\n // onPostBootstrap\n activity = report.activityTimer(`onPostBootstrap`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n apiRunnerNode(`onPostBootstrap`, { parentSpan: activity.span }).then(\n () => {\n activity.end()\n bootstrapSpan.finish()\n resolve({ graphqlRunner })\n }\n )\n }\n }, 100)\n\n if (store.getState().jobs.active.length === 0) {\n // onPostBootstrap\n activity = report.activityTimer(`onPostBootstrap`, {\n parentSpan: bootstrapSpan,\n })\n activity.start()\n await apiRunnerNode(`onPostBootstrap`, { parentSpan: activity.span })\n activity.end()\n\n bootstrapSpan.finish()\n\n report.log(``)\n report.info(`bootstrap finished - ${process.uptime()} s`)\n report.log(``)\n emitter.emit(`BOOTSTRAP_FINISHED`)\n return {\n graphqlRunner,\n }\n } else {\n return new Promise(resolve => {\n // Wait until all side effect jobs are finished.\n emitter.on(`END_JOB`, () => checkJobsDone(resolve))\n })\n }\n}\n"],"file":"index.js"}
@@ -153,7 +153,7 @@ module.exports = (config = {}) => {
153
153
  }; // Add internal plugins
154
154
 
155
155
 
156
- const internalPlugins = [`../../internal-plugins/dev-404-page`, `../../internal-plugins/load-babel-config`, `../../internal-plugins/internal-data-bridge`, `../../internal-plugins/prod-404`, `../../internal-plugins/query-runner`];
156
+ const internalPlugins = [`../../internal-plugins/dev-404-page`, `../../internal-plugins/load-babel-config`, `../../internal-plugins/internal-data-bridge`, `../../internal-plugins/prod-404`, `../../internal-plugins/query-runner`, `../../internal-plugins/webpack-theme-component-shadowing`];
157
157
  internalPlugins.forEach(relPath => {
158
158
  const absPath = path.join(__dirname, relPath);
159
159
  plugins.push(processPlugin(absPath));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/bootstrap/load-plugins/load.js"],"names":["_","require","slash","fs","path","crypto","glob","warnOnIncompatiblePeerDependency","store","existsSync","sync","createNodeId","createFileContentHash","root","globPattern","hash","createHash","files","nodir","forEach","filepath","update","readFileSync","digest","createPluginId","name","pluginObject","JSON","stringify","options","resolvePlugin","pluginName","resolvedPath","resolve","packageJSON","parse","id","version","Error","dirname","err","module","exports","config","plugins","processPlugin","plugin","isString","info","pluginOptions","subplugins","p","push","merge","internalPlugins","relPath","absPath","join","__dirname","process","cwd","program","getState","directory","pathCheck"],"mappings":"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","sourcesContent":["const _ = require(`lodash`)\nconst slash = require(`slash`)\nconst fs = require(`fs`)\nconst path = require(`path`)\nconst crypto = require(`crypto`)\nconst glob = require(`glob`)\nconst { warnOnIncompatiblePeerDependency } = require(`./validate`)\nconst { store } = require(`../../redux`)\nconst existsSync = require(`fs-exists-cached`).sync\nconst createNodeId = require(`../../utils/create-node-id`)\n\nfunction createFileContentHash(root, globPattern) {\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 * @param {*} name Name of the plugin\n * @param {*} pluginObject\n */\nconst createPluginId = (name, pluginObject = null) =>\n createNodeId(\n name + (pluginObject ? JSON.stringify(pluginObject.options) : ``),\n `Plugin`\n )\n\n/**\n * @typedef {Object} PluginInfo\n * @property {string} resolve The absolute path to the plugin\n * @property {string} name The plugin name\n * @property {string} version The plugin version (can be content hash)\n */\n\n/**\n * resolvePlugin\n * @param {string} pluginName\n * This can be a name of a local plugin, the name of a plugin located in\n * node_modules, or a Gatsby internal plugin. In the last case the pluginName\n * will be an absolute path.\n * @return {PluginInfo}\n */\nfunction resolvePlugin(pluginName) {\n // Only find plugins when we're not given an absolute path\n if (!existsSync(pluginName)) {\n // Find the plugin in the local plugins folder\n const resolvedPath = slash(path.resolve(`./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 )\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 resolvedPath = slash(path.dirname(require.resolve(pluginName)))\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 throw new Error(\n `Unable to find plugin \"${pluginName}\". Perhaps you need to install its package?`\n )\n }\n}\n\nmodule.exports = (config = {}) => {\n // Instantiate plugins.\n const plugins = []\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 const processPlugin = plugin => {\n if (_.isString(plugin)) {\n const info = resolvePlugin(plugin)\n\n return {\n ...info,\n pluginOptions: {\n plugins: [],\n },\n }\n } else {\n plugin.options = plugin.options || {}\n\n // Plugins can have plugins.\n const subplugins = []\n if (plugin.options.plugins) {\n plugin.options.plugins.forEach(p => {\n subplugins.push(processPlugin(p))\n })\n\n plugin.options.plugins = subplugins\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 pluginOptions: {\n plugins: [],\n },\n }\n }\n\n const info = resolvePlugin(plugin.resolve)\n\n return {\n ...info,\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`,\n `../../internal-plugins/query-runner`,\n ]\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 plugins.push(processPlugin(plugin))\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 plugins.push(\n processPlugin({\n resolve: `gatsby-plugin-page-creator`,\n options: {\n path: slash(path.join(program.directory, `src/pages`)),\n pathCheck: false,\n },\n })\n )\n\n return plugins\n}\n"],"file":"load.js"}
1
+ {"version":3,"sources":["../../../src/bootstrap/load-plugins/load.js"],"names":["_","require","slash","fs","path","crypto","glob","warnOnIncompatiblePeerDependency","store","existsSync","sync","createNodeId","createFileContentHash","root","globPattern","hash","createHash","files","nodir","forEach","filepath","update","readFileSync","digest","createPluginId","name","pluginObject","JSON","stringify","options","resolvePlugin","pluginName","resolvedPath","resolve","packageJSON","parse","id","version","Error","dirname","err","module","exports","config","plugins","processPlugin","plugin","isString","info","pluginOptions","subplugins","p","push","merge","internalPlugins","relPath","absPath","join","__dirname","process","cwd","program","getState","directory","pathCheck"],"mappings":"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","sourcesContent":["const _ = require(`lodash`)\nconst slash = require(`slash`)\nconst fs = require(`fs`)\nconst path = require(`path`)\nconst crypto = require(`crypto`)\nconst glob = require(`glob`)\nconst { warnOnIncompatiblePeerDependency } = require(`./validate`)\nconst { store } = require(`../../redux`)\nconst existsSync = require(`fs-exists-cached`).sync\nconst createNodeId = require(`../../utils/create-node-id`)\n\nfunction createFileContentHash(root, globPattern) {\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 * @param {*} name Name of the plugin\n * @param {*} pluginObject\n */\nconst createPluginId = (name, pluginObject = null) =>\n createNodeId(\n name + (pluginObject ? JSON.stringify(pluginObject.options) : ``),\n `Plugin`\n )\n\n/**\n * @typedef {Object} PluginInfo\n * @property {string} resolve The absolute path to the plugin\n * @property {string} name The plugin name\n * @property {string} version The plugin version (can be content hash)\n */\n\n/**\n * resolvePlugin\n * @param {string} pluginName\n * This can be a name of a local plugin, the name of a plugin located in\n * node_modules, or a Gatsby internal plugin. In the last case the pluginName\n * will be an absolute path.\n * @return {PluginInfo}\n */\nfunction resolvePlugin(pluginName) {\n // Only find plugins when we're not given an absolute path\n if (!existsSync(pluginName)) {\n // Find the plugin in the local plugins folder\n const resolvedPath = slash(path.resolve(`./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 )\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 resolvedPath = slash(path.dirname(require.resolve(pluginName)))\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 throw new Error(\n `Unable to find plugin \"${pluginName}\". Perhaps you need to install its package?`\n )\n }\n}\n\nmodule.exports = (config = {}) => {\n // Instantiate plugins.\n const plugins = []\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 const processPlugin = plugin => {\n if (_.isString(plugin)) {\n const info = resolvePlugin(plugin)\n\n return {\n ...info,\n pluginOptions: {\n plugins: [],\n },\n }\n } else {\n plugin.options = plugin.options || {}\n\n // Plugins can have plugins.\n const subplugins = []\n if (plugin.options.plugins) {\n plugin.options.plugins.forEach(p => {\n subplugins.push(processPlugin(p))\n })\n\n plugin.options.plugins = subplugins\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 pluginOptions: {\n plugins: [],\n },\n }\n }\n\n const info = resolvePlugin(plugin.resolve)\n\n return {\n ...info,\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`,\n `../../internal-plugins/query-runner`,\n `../../internal-plugins/webpack-theme-component-shadowing`,\n ]\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 plugins.push(processPlugin(plugin))\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 plugins.push(\n processPlugin({\n resolve: `gatsby-plugin-page-creator`,\n options: {\n path: slash(path.join(program.directory, `src/pages`)),\n pathCheck: false,\n },\n })\n )\n\n return plugins\n}\n"],"file":"load.js"}