diff --git a/.cache/api-runner-browser-plugins.js b/.cache/api-runner-browser-plugins.js index 422e841..d1b13de 100644 --- a/.cache/api-runner-browser-plugins.js +++ b/.cache/api-runner-browser-plugins.js @@ -1,16 +1,7 @@ module.exports = [{ - plugin: require('../node_modules/gatsby-plugin-typography/gatsby-browser.js'), - options: {"plugins":[],"pathToConfigModule":"C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@christiandavid\\gatsby-theme-byfolio/src/utils/typography"}, - },{ plugin: require('../node_modules/gatsby-plugin-manifest/gatsby-browser.js'), - options: {"plugins":[],"name":"Mukund's Portfolio","short_name":"MK","description":"This cool App contains information about my work experience and my journey.","lang":"en","start_url":"/","background_color":"#000","theme_color":"#fff","display":"standalone","icon":"src/images/icon.png","legacy":true,"theme_color_in_head":true,"cache_busting_mode":"query","crossOrigin":"anonymous","include_favicon":true,"cacheDigest":"35e7419a9581a42600d1d4d990c07e3c"}, - },{ - plugin: require('../node_modules/gatsby-plugin-transition-link/gatsby-browser.js'), - options: {"plugins":[],"layout":"C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@christiandavid\\gatsby-theme-byfolio\\src\\layout\\index.js"}, - },{ - plugin: require('../node_modules/gatsby-plugin-offline/gatsby-browser.js'), - options: {"plugins":[]}, + options: {"plugins":[],"name":"Mate Portfolio","short_name":"Mate","start_url":"/","background_color":"#FFFFFF","theme_color":"#7c37ad","display":"minimal-ui","icon":"icon.png","legacy":true,"theme_color_in_head":true,"cache_busting_mode":"query","crossOrigin":"anonymous","include_favicon":true,"cacheDigest":"bd811806cc1b8afc275a716b064f3106"}, },{ - plugin: require('../node_modules/gatsby-plugin-nprogress/gatsby-browser.js'), - options: {"plugins":[],"showSpinner":false}, + plugin: require('../node_modules/gatsby-theme-mate/gatsby-browser.js'), + options: {"plugins":[],"accessToken":"ym_MYTGHNxBgH7ZENgkQ6158vaDkZ9sBVaPB0I8IXRc","spaceId":"lvsph0h3pwj7"}, }] diff --git a/.cache/api-runner-browser.js b/.cache/api-runner-browser.js index 2dd5981..c65337c 100644 --- a/.cache/api-runner-browser.js +++ b/.cache/api-runner-browser.js @@ -1,11 +1,6 @@ const plugins = require(`./api-runner-browser-plugins`) -const { - getResourcesForPathname, - getResourcesForPathnameSync, - getResourceURLsForPathname, - loadPage, - loadPageSync, -} = require(`./loader`).publicLoader +const { getResourceURLsForPathname, loadPage, loadPageSync } = + require(`./loader`).publicLoader exports.apiRunner = (api, args = {}, defaultReturn, argTransform) => { // Hooks for gatsby-cypress's API handler @@ -24,10 +19,6 @@ exports.apiRunner = (api, args = {}, defaultReturn, argTransform) => { return undefined } - // Deprecated April 2019. Use `loadPageSync` instead - args.getResourcesForPathnameSync = getResourcesForPathnameSync - // Deprecated April 2019. Use `loadPage` instead - args.getResourcesForPathname = getResourcesForPathname args.getResourceURLsForPathname = getResourceURLsForPathname args.loadPage = loadPage args.loadPageSync = loadPageSync diff --git a/.cache/api-runner-ssr.js b/.cache/api-runner-ssr.js index 850f84a..4c43137 100644 --- a/.cache/api-runner-ssr.js +++ b/.cache/api-runner-ssr.js @@ -1,22 +1,17 @@ var plugins = [{ - plugin: require('C:/Project/Github/Mukund-Fun-Website/node_modules/gatsby-plugin-typography/gatsby-ssr'), - options: {"plugins":[],"pathToConfigModule":"C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@christiandavid\\gatsby-theme-byfolio/src/utils/typography"}, - },{ - plugin: require('C:/Project/Github/Mukund-Fun-Website/node_modules/gatsby-plugin-manifest/gatsby-ssr'), - options: {"plugins":[],"name":"Mukund's Portfolio","short_name":"MK","description":"This cool App contains information about my work experience and my journey.","lang":"en","start_url":"/","background_color":"#000","theme_color":"#fff","display":"standalone","icon":"src/images/icon.png","legacy":true,"theme_color_in_head":true,"cache_busting_mode":"query","crossOrigin":"anonymous","include_favicon":true,"cacheDigest":"35e7419a9581a42600d1d4d990c07e3c"}, - },{ - plugin: require('C:/Project/Github/Mukund-Fun-Website/node_modules/gatsby-plugin-transition-link/gatsby-ssr'), - options: {"plugins":[],"layout":"C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@christiandavid\\gatsby-theme-byfolio\\src\\layout\\index.js"}, - },{ - plugin: require('C:/Project/Github/Mukund-Fun-Website/node_modules/gatsby-plugin-offline/gatsby-ssr'), - options: {"plugins":[]}, - },{ + name: 'gatsby-plugin-react-helmet', plugin: require('C:/Project/Github/Mukund-Fun-Website/node_modules/gatsby-plugin-react-helmet/gatsby-ssr'), options: {"plugins":[]}, },{ - plugin: require('C:/Project/Github/Mukund-Fun-Website/node_modules/gatsby-plugin-sitemap/gatsby-ssr'), - options: {"plugins":[],"exclude":["/experience/_additionalSkills"],"output":"/sitemap.xml","createLinkInHead":true}, + name: 'gatsby-plugin-styled-components', + plugin: require('C:/Project/Github/Mukund-Fun-Website/node_modules/gatsby-plugin-styled-components/gatsby-ssr'), + options: {"plugins":[],"displayName":true,"fileName":true,"minify":true,"namespace":"","transpileTemplateLiterals":true,"topLevelImportPaths":[],"pure":false}, + },{ + name: 'gatsby-plugin-manifest', + plugin: require('C:/Project/Github/Mukund-Fun-Website/node_modules/gatsby-plugin-manifest/gatsby-ssr'), + options: {"plugins":[],"name":"Mate Portfolio","short_name":"Mate","start_url":"/","background_color":"#FFFFFF","theme_color":"#7c37ad","display":"minimal-ui","icon":"icon.png","legacy":true,"theme_color_in_head":true,"cache_busting_mode":"query","crossOrigin":"anonymous","include_favicon":true,"cacheDigest":"bd811806cc1b8afc275a716b064f3106"}, }] +/* global plugins */ // During bootstrap, we write requires at top of this file which looks like: // var plugins = [ // { @@ -31,31 +26,76 @@ var plugins = [{ const apis = require(`./api-ssr-docs`) -// Run the specified API in any plugins that have implemented it -module.exports = (api, args, defaultReturn, argTransform) => { +function augmentErrorWithPlugin(plugin, err) { + if (plugin.name !== `default-site-plugin`) { + // default-site-plugin is user code and will print proper stack trace, + // so no point in annotating error message pointing out which plugin is root of the problem + err.message += ` (from plugin: ${plugin.name})` + } + + throw err +} + +export function apiRunner(api, args, defaultReturn, argTransform) { if (!apis[api]) { console.log(`This API doesn't exist`, api) } - // Run each plugin in series. - // eslint-disable-next-line no-undef - let results = plugins.map(plugin => { - if (!plugin.plugin[api]) { - return undefined + const results = [] + plugins.forEach(plugin => { + const apiFn = plugin.plugin[api] + if (!apiFn) { + return } - const result = plugin.plugin[api](args, plugin.options) - if (result && argTransform) { - args = argTransform({ args, result }) + + try { + const result = apiFn(args, plugin.options) + + if (result && argTransform) { + args = argTransform({ args, result }) + } + + // This if case keeps behaviour as before, we should allow undefined here as the api is defined + // TODO V4 + if (typeof result !== `undefined`) { + results.push(result) + } + } catch (e) { + augmentErrorWithPlugin(plugin, e) } - return result }) - // Filter out undefined results. - results = results.filter(result => typeof result !== `undefined`) + return results.length ? results : [defaultReturn] +} - if (results.length > 0) { - return results - } else { - return [defaultReturn] +export async function apiRunnerAsync(api, args, defaultReturn, argTransform) { + if (!apis[api]) { + console.log(`This API doesn't exist`, api) } + + const results = [] + for (const plugin of plugins) { + const apiFn = plugin.plugin[api] + if (!apiFn) { + continue + } + + try { + const result = await apiFn(args, plugin.options) + + if (result && argTransform) { + args = argTransform({ args, result }) + } + + // This if case keeps behaviour as before, we should allow undefined here as the api is defined + // TODO V4 + if (typeof result !== `undefined`) { + results.push(result) + } + } catch (e) { + augmentErrorWithPlugin(plugin, e) + } + } + + return results.length ? results : [defaultReturn] } diff --git a/.cache/app.js b/.cache/app.js index 0d2e6ce..dfd7cae 100644 --- a/.cache/app.js +++ b/.cache/app.js @@ -1,6 +1,5 @@ import React from "react" import ReactDOM from "react-dom" -import domReady from "@mikaelkristiansson/domready" import io from "socket.io-client" import socketIo from "./socketIo" @@ -9,20 +8,32 @@ import { apiRunner, apiRunnerAsync } from "./api-runner-browser" import { setLoader, publicLoader } from "./loader" import { Indicator } from "./loading-indicator/indicator" import DevLoader from "./dev-loader" -import syncRequires from "$virtual/sync-requires" +import asyncRequires from "$virtual/async-requires" // Generated during bootstrap import matchPaths from "$virtual/match-paths.json" import { LoadingIndicatorEventHandler } from "./loading-indicator" +import Root from "./root" +import { init as navigationInit } from "./navigation" +// ensure in develop we have at least some .css (even if it's empty). +// this is so there is no warning about not matching content-type when site doesn't include any regular css (for example when css-in-js is used) +// this also make sure that if all css is removed in develop we are not left with stale commons.css that have stale content +import "./blank.css" -if (process.env.GATSBY_HOT_LOADER === `fast-refresh` && module.hot) { - module.hot.accept(`$virtual/sync-requires`, () => { - // Manually reload - }) -} +// Enable fast-refresh for virtual sync-requires, gatsby-browser & navigation +// To ensure that our component can hot reload in case anything below doesn't +// satisfy fast-refresh constraints +module.hot.accept( + [`$virtual/async-requires`, `./api-runner-browser`, `./navigation`], + () => { + // asyncRequires should be automatically updated here (due to ESM import and webpack HMR spec), + // but loader doesn't know that and needs to be manually nudged + loader.updateAsyncRequires(asyncRequires) + } +) window.___emitter = emitter -const loader = new DevLoader(syncRequires, matchPaths) +const loader = new DevLoader(asyncRequires, matchPaths) setLoader(loader) loader.setApiRunner(apiRunner) @@ -118,12 +129,22 @@ apiRunnerAsync(`onClientEntry`).then(() => { const rootElement = document.getElementById(`___gatsby`) const focusEl = document.getElementById(`gatsby-focus-wrapper`) + + // Client only pages have any empty body so we just do a normal + // render to avoid React complaining about hydration mis-matches. + let defaultRenderer = ReactDOM.render + if (focusEl && focusEl.children.length) { + if (ReactDOM.hydrateRoot) { + defaultRenderer = ReactDOM.hydrateRoot + } else { + defaultRenderer = ReactDOM.hydrate + } + } + const renderer = apiRunner( `replaceHydrateFunction`, undefined, - // Client only pages have any empty body so we just do a normal - // render to avoid React complaining about hydration mis-matches. - focusEl && focusEl.children.length > 0 ? ReactDOM.hydrate : ReactDOM.render + defaultRenderer )[0] let dismissLoadingIndicator @@ -155,33 +176,82 @@ apiRunnerAsync(`onClientEntry`).then(() => { loader.loadPage(`/404.html`), loader.loadPage(window.location.pathname), ]).then(() => { - const preferDefault = m => (m && m.default) || m - const Root = preferDefault(require(`./root`)) - domReady(() => { - if (dismissLoadingIndicator) { - dismissLoadingIndicator() - } + navigationInit() + + function onHydrated() { + apiRunner(`onInitialClientRender`) + + // Render query on demand overlay + if ( + process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR && + process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true` + ) { + const indicatorMountElement = document.createElement(`div`) + indicatorMountElement.setAttribute( + `id`, + `query-on-demand-indicator-element` + ) + document.body.append(indicatorMountElement) - renderer(, rootElement, () => { - apiRunner(`onInitialClientRender`) - - // Render query on demand overlay - if ( - process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR && - process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true` - ) { - const indicatorMountElement = document.createElement(`div`) - indicatorMountElement.setAttribute( - `id`, - `query-on-demand-indicator-element` + if (renderer === ReactDOM.hydrateRoot) { + ReactDOM.createRoot(indicatorMountElement).render( + ) - document.body.append(indicatorMountElement) + } else { ReactDOM.render( , indicatorMountElement ) } - }) - }) + } + } + + function App() { + const onClientEntryRanRef = React.useRef(false) + + React.useEffect(() => { + if (!onClientEntryRanRef.current) { + onClientEntryRanRef.current = true + + onHydrated() + } + }, []) + + return + } + + function runRender() { + if (dismissLoadingIndicator) { + dismissLoadingIndicator() + } + + if (renderer === ReactDOM.hydrateRoot) { + renderer(rootElement, ) + } else { + renderer(, rootElement) + } + } + + // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450 + // TODO remove IE 10 support + const doc = document + if ( + doc.readyState === `complete` || + (doc.readyState !== `loading` && !doc.documentElement.doScroll) + ) { + setTimeout(function () { + runRender() + }, 0) + } else { + const handler = function () { + doc.removeEventListener(`DOMContentLoaded`, handler, false) + window.removeEventListener(`load`, handler, false) + + runRender() + } + + doc.addEventListener(`DOMContentLoaded`, handler, false) + window.addEventListener(`load`, handler, false) + } }) }) diff --git a/.cache/async-requires.js b/.cache/async-requires.js index f4bbc65..d2b0288 100644 --- a/.cache/async-requires.js +++ b/.cache/async-requires.js @@ -3,12 +3,7 @@ const preferDefault = m => (m && m.default) || m exports.components = { "component---cache-dev-404-page-js": () => import("./../../dev-404-page.js" /* webpackChunkName: "component---cache-dev-404-page-js" */), - "component---node-modules-christiandavid-gatsby-theme-byfolio-src-pages-404-js": () => import("./../../../node_modules/@christiandavid/gatsby-theme-byfolio/src/pages/404.js" /* webpackChunkName: "component---node-modules-christiandavid-gatsby-theme-byfolio-src-pages-404-js" */), - "component---node-modules-christiandavid-gatsby-theme-byfolio-src-templates-job-js": () => import("./../../../node_modules/@christiandavid/gatsby-theme-byfolio/src/templates/job.js" /* webpackChunkName: "component---node-modules-christiandavid-gatsby-theme-byfolio-src-templates-job-js" */), - "component---src-pages-404-js": () => import("./../../../src/pages/404.js" /* webpackChunkName: "component---src-pages-404-js" */), - "component---src-pages-about-me-js": () => import("./../../../src/pages/about-me.js" /* webpackChunkName: "component---src-pages-about-me-js" */), - "component---src-pages-experience-js": () => import("./../../../src/pages/experience.js" /* webpackChunkName: "component---src-pages-experience-js" */), - "component---src-pages-index-js": () => import("./../../../src/pages/index.js" /* webpackChunkName: "component---src-pages-index-js" */), - "component---src-pages-skills-js": () => import("./../../../src/pages/skills.js" /* webpackChunkName: "component---src-pages-skills-js" */) + "component---node-modules-gatsby-theme-mate-src-templates-home-tsx": () => import("./../../../node_modules/gatsby-theme-mate/src/templates/Home.tsx" /* webpackChunkName: "component---node-modules-gatsby-theme-mate-src-templates-home-tsx" */), + "component---node-modules-gatsby-theme-mate-src-templates-not-found-tsx": () => import("./../../../node_modules/gatsby-theme-mate/src/templates/NotFound.tsx" /* webpackChunkName: "component---node-modules-gatsby-theme-mate-src-templates-not-found-tsx" */) } diff --git a/.cache/babelState.json b/.cache/babelState.json index 2fe7203..009ca3b 100644 --- a/.cache/babelState.json +++ b/.cache/babelState.json @@ -17,26 +17,31 @@ { "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@babel\\plugin-proposal-numeric-separator\\lib\\index.js", "options": {} - } - ], - "presets": [ + }, { - "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@emotion\\babel-preset-css-prop\\dist\\babel-preset-css-prop.cjs.js", + "name": "babel-plugin-styled-components", + "stage": "develop", "options": { - "sourceMap": true, - "autoLabel": true, "plugins": [], - "labelFormat": "[local]", - "cssPropOptimization": true + "displayName": true, + "fileName": true, + "minify": true, + "namespace": "", + "transpileTemplateLiterals": true, + "topLevelImportPaths": [], + "pure": false, + "ssr": false } - }, + } + ], + "presets": [ { "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@babel\\preset-typescript\\lib\\index.js", "options": { "plugins": [], - "allExtensions": false, "isTSX": false, - "jsxPragma": "React" + "jsxPragma": "React", + "allExtensions": false } } ], @@ -62,26 +67,31 @@ { "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@babel\\plugin-proposal-numeric-separator\\lib\\index.js", "options": {} - } - ], - "presets": [ + }, { - "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@emotion\\babel-preset-css-prop\\dist\\babel-preset-css-prop.cjs.js", + "name": "babel-plugin-styled-components", + "stage": "develop-html", "options": { - "sourceMap": true, - "autoLabel": true, "plugins": [], - "labelFormat": "[local]", - "cssPropOptimization": true + "displayName": true, + "fileName": true, + "minify": true, + "namespace": "", + "transpileTemplateLiterals": true, + "topLevelImportPaths": [], + "pure": false, + "ssr": false } - }, + } + ], + "presets": [ { "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@babel\\preset-typescript\\lib\\index.js", "options": { "plugins": [], - "allExtensions": false, "isTSX": false, - "jsxPragma": "React" + "jsxPragma": "React", + "allExtensions": false } } ], @@ -107,26 +117,31 @@ { "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@babel\\plugin-proposal-numeric-separator\\lib\\index.js", "options": {} - } - ], - "presets": [ + }, { - "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@emotion\\babel-preset-css-prop\\dist\\babel-preset-css-prop.cjs.js", + "name": "babel-plugin-styled-components", + "stage": "build-html", "options": { - "sourceMap": true, - "autoLabel": true, "plugins": [], - "labelFormat": "[local]", - "cssPropOptimization": true + "displayName": true, + "fileName": true, + "minify": true, + "namespace": "", + "transpileTemplateLiterals": true, + "topLevelImportPaths": [], + "pure": false, + "ssr": true } - }, + } + ], + "presets": [ { "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@babel\\preset-typescript\\lib\\index.js", "options": { "plugins": [], - "allExtensions": false, "isTSX": false, - "jsxPragma": "React" + "jsxPragma": "React", + "allExtensions": false } } ], @@ -152,26 +167,31 @@ { "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@babel\\plugin-proposal-numeric-separator\\lib\\index.js", "options": {} - } - ], - "presets": [ + }, { - "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@emotion\\babel-preset-css-prop\\dist\\babel-preset-css-prop.cjs.js", + "name": "babel-plugin-styled-components", + "stage": "build-javascript", "options": { - "sourceMap": true, - "autoLabel": true, "plugins": [], - "labelFormat": "[local]", - "cssPropOptimization": true + "displayName": true, + "fileName": true, + "minify": true, + "namespace": "", + "transpileTemplateLiterals": true, + "topLevelImportPaths": [], + "pure": false, + "ssr": true } - }, + } + ], + "presets": [ { "name": "C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@babel\\preset-typescript\\lib\\index.js", "options": { "plugins": [], - "allExtensions": false, "isTSX": false, - "jsxPragma": "React" + "jsxPragma": "React", + "allExtensions": false } } ], @@ -182,6 +202,7 @@ } }, "browserslist": [ - "defaults" + ">0.25%", + "not dead" ] } \ No newline at end of file diff --git a/.cache/caches/gatsby-plugin-offline/app-shell.js b/.cache/caches/gatsby-plugin-offline/app-shell.js deleted file mode 100644 index a38a421..0000000 --- a/.cache/caches/gatsby-plugin-offline/app-shell.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -exports.__esModule = true; -exports.default = void 0; - -var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); - -var _react = _interopRequireDefault(require("react")); - -var AppShell = /*#__PURE__*/function (_React$Component) { - (0, _inheritsLoose2.default)(AppShell, _React$Component); - - function AppShell() { - return _React$Component.apply(this, arguments) || this; - } - - var _proto = AppShell.prototype; - - _proto.render = function render() { - return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null); - }; - - return AppShell; -}(_react.default.Component); - -var _default = AppShell; -exports.default = _default; \ No newline at end of file diff --git a/.cache/caches/gatsby-plugin-typography/typography.js b/.cache/caches/gatsby-plugin-typography/typography.js deleted file mode 100644 index e8a59fa..0000000 --- a/.cache/caches/gatsby-plugin-typography/typography.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("C:\\Project\\Github\\Mukund-Fun-Website\\node_modules\\@christiandavid\\gatsby-theme-byfolio/src/utils/typography") \ No newline at end of file diff --git a/.cache/commonjs/api-runner-browser.js b/.cache/commonjs/api-runner-browser.js index fb76cb8..f139fd3 100644 --- a/.cache/commonjs/api-runner-browser.js +++ b/.cache/commonjs/api-runner-browser.js @@ -3,8 +3,6 @@ const plugins = require(`./api-runner-browser-plugins`); const { - getResourcesForPathname, - getResourcesForPathnameSync, getResourceURLsForPathname, loadPage, loadPageSync @@ -25,12 +23,8 @@ exports.apiRunner = (api, args = {}, defaultReturn, argTransform) => { let results = plugins.map(plugin => { if (!plugin.plugin[api]) { return undefined; - } // Deprecated April 2019. Use `loadPageSync` instead - - - args.getResourcesForPathnameSync = getResourcesForPathnameSync; // Deprecated April 2019. Use `loadPage` instead + } - args.getResourcesForPathname = getResourcesForPathname; args.getResourceURLsForPathname = getResourceURLsForPathname; args.loadPage = loadPage; args.loadPageSync = loadPageSync; diff --git a/.cache/commonjs/api-runner-ssr.js b/.cache/commonjs/api-runner-ssr.js index ba6125d..a4e5fab 100644 --- a/.cache/commonjs/api-runner-ssr.js +++ b/.cache/commonjs/api-runner-ssr.js @@ -1,5 +1,10 @@ "use strict"; +exports.__esModule = true; +exports.apiRunner = apiRunner; +exports.apiRunnerAsync = apiRunnerAsync; + +/* global plugins */ // During bootstrap, we write requires at top of this file which looks like: // var plugins = [ // { @@ -11,38 +16,86 @@ // options: { ... }, // }, // ] -const apis = require(`./api-ssr-docs`); // Run the specified API in any plugins that have implemented it +const apis = require(`./api-ssr-docs`); + +function augmentErrorWithPlugin(plugin, err) { + if (plugin.name !== `default-site-plugin`) { + // default-site-plugin is user code and will print proper stack trace, + // so no point in annotating error message pointing out which plugin is root of the problem + err.message += ` (from plugin: ${plugin.name})`; + } + throw err; +} -module.exports = (api, args, defaultReturn, argTransform) => { +function apiRunner(api, args, defaultReturn, argTransform) { if (!apis[api]) { console.log(`This API doesn't exist`, api); - } // Run each plugin in series. - // eslint-disable-next-line no-undef + } + const results = []; + plugins.forEach(plugin => { + const apiFn = plugin.plugin[api]; - let results = plugins.map(plugin => { - if (!plugin.plugin[api]) { - return undefined; + if (!apiFn) { + return; } - const result = plugin.plugin[api](args, plugin.options); + try { + const result = apiFn(args, plugin.options); + + if (result && argTransform) { + args = argTransform({ + args, + result + }); + } // This if case keeps behaviour as before, we should allow undefined here as the api is defined + // TODO V4 - if (result && argTransform) { - args = argTransform({ - args, - result - }); + + if (typeof result !== `undefined`) { + results.push(result); + } + } catch (e) { + augmentErrorWithPlugin(plugin, e); } + }); + return results.length ? results : [defaultReturn]; +} - return result; - }); // Filter out undefined results. +async function apiRunnerAsync(api, args, defaultReturn, argTransform) { + if (!apis[api]) { + console.log(`This API doesn't exist`, api); + } - results = results.filter(result => typeof result !== `undefined`); + const results = []; - if (results.length > 0) { - return results; - } else { - return [defaultReturn]; + for (const plugin of plugins) { + const apiFn = plugin.plugin[api]; + + if (!apiFn) { + continue; + } + + try { + const result = await apiFn(args, plugin.options); + + if (result && argTransform) { + args = argTransform({ + args, + result + }); + } // This if case keeps behaviour as before, we should allow undefined here as the api is defined + // TODO V4 + + + if (typeof result !== `undefined`) { + results.push(result); + } + } catch (e) { + augmentErrorWithPlugin(plugin, e); + } } -}; \ No newline at end of file + + return results.length ? results : [defaultReturn]; +} \ No newline at end of file diff --git a/.cache/commonjs/app.js b/.cache/commonjs/app.js index f3c24eb..66fb9c9 100644 --- a/.cache/commonjs/app.js +++ b/.cache/commonjs/app.js @@ -5,14 +5,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau exports.__esModule = true; exports.notCalledFunction = notCalledFunction; -var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard")); - var _react = _interopRequireDefault(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); -var _domready = _interopRequireDefault(require("@mikaelkristiansson/domready")); - var _socket = _interopRequireDefault(require("socket.io-client")); var _socketIo = _interopRequireDefault(require("./socketIo")); @@ -27,20 +23,32 @@ var _indicator = require("./loading-indicator/indicator"); var _devLoader = _interopRequireDefault(require("./dev-loader")); -var _syncRequires = _interopRequireDefault(require("$virtual/sync-requires")); +var _asyncRequires = _interopRequireDefault(require("$virtual/async-requires")); var _matchPaths = _interopRequireDefault(require("$virtual/match-paths.json")); var _loadingIndicator = require("./loading-indicator"); -// Generated during bootstrap -if (process.env.GATSBY_HOT_LOADER === `fast-refresh` && module.hot) { - module.hot.accept(`$virtual/sync-requires`, () => {// Manually reload - }); -} +var _root = _interopRequireDefault(require("./root")); + +var _navigation = require("./navigation"); +require("./blank.css"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +// Enable fast-refresh for virtual sync-requires, gatsby-browser & navigation +// To ensure that our component can hot reload in case anything below doesn't +// satisfy fast-refresh constraints +module.hot.accept([`$virtual/async-requires`, `./api-runner-browser`, `./navigation`], () => { + // asyncRequires should be automatically updated here (due to ESM import and webpack HMR spec), + // but loader doesn't know that and needs to be manually nudged + loader.updateAsyncRequires(_asyncRequires.default); +}); window.___emitter = _emitter.default; -const loader = new _devLoader.default(_syncRequires.default, _matchPaths.default); +const loader = new _devLoader.default(_asyncRequires.default, _matchPaths.default); (0, _loader.setLoader)(loader); loader.setApiRunner(_apiRunnerBrowser.apiRunner); window.___loader = _loader.publicLoader; // Do dummy dynamic import so the jsonp __webpack_require__.e is added to the commons.js @@ -52,7 +60,7 @@ window.___loader = _loader.publicLoader; // Do dummy dynamic import so the jsonp // error. function notCalledFunction() { - return Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require(`./dummy`))); + return Promise.resolve().then(() => _interopRequireWildcard(require(`./dummy`))); } // Let the site/plugins run code very early. @@ -107,10 +115,20 @@ function notCalledFunction() { } const rootElement = document.getElementById(`___gatsby`); - const focusEl = document.getElementById(`gatsby-focus-wrapper`); - const renderer = (0, _apiRunnerBrowser.apiRunner)(`replaceHydrateFunction`, undefined, // Client only pages have any empty body so we just do a normal + const focusEl = document.getElementById(`gatsby-focus-wrapper`); // Client only pages have any empty body so we just do a normal // render to avoid React complaining about hydration mis-matches. - focusEl && focusEl.children.length > 0 ? _reactDom.default.hydrate : _reactDom.default.render)[0]; + + let defaultRenderer = _reactDom.default.render; + + if (focusEl && focusEl.children.length) { + if (_reactDom.default.hydrateRoot) { + defaultRenderer = _reactDom.default.hydrateRoot; + } else { + defaultRenderer = _reactDom.default.hydrate; + } + } + + const renderer = (0, _apiRunnerBrowser.apiRunner)(`replaceHydrateFunction`, undefined, defaultRenderer)[0]; let dismissLoadingIndicator; if (process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND && process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`) { @@ -134,25 +152,66 @@ function notCalledFunction() { } Promise.all([loader.loadPage(`/dev-404-page/`), loader.loadPage(`/404.html`), loader.loadPage(window.location.pathname)]).then(() => { - const preferDefault = m => m && m.default || m; + (0, _navigation.init)(); + + function onHydrated() { + (0, _apiRunnerBrowser.apiRunner)(`onInitialClientRender`); // Render query on demand overlay + + if (process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR && process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`) { + const indicatorMountElement = document.createElement(`div`); + indicatorMountElement.setAttribute(`id`, `query-on-demand-indicator-element`); + document.body.append(indicatorMountElement); + + if (renderer === _reactDom.default.hydrateRoot) { + _reactDom.default.createRoot(indicatorMountElement).render( /*#__PURE__*/_react.default.createElement(_loadingIndicator.LoadingIndicatorEventHandler, null)); + } else { + _reactDom.default.render( /*#__PURE__*/_react.default.createElement(_loadingIndicator.LoadingIndicatorEventHandler, null), indicatorMountElement); + } + } + } + + function App() { + const onClientEntryRanRef = _react.default.useRef(false); + + _react.default.useEffect(() => { + if (!onClientEntryRanRef.current) { + onClientEntryRanRef.current = true; + onHydrated(); + } + }, []); + + return /*#__PURE__*/_react.default.createElement(_root.default, null); + } - const Root = preferDefault(require(`./root`)); - (0, _domready.default)(() => { + function runRender() { if (dismissLoadingIndicator) { dismissLoadingIndicator(); } - renderer( /*#__PURE__*/_react.default.createElement(Root, null), rootElement, () => { - (0, _apiRunnerBrowser.apiRunner)(`onInitialClientRender`); // Render query on demand overlay + if (renderer === _reactDom.default.hydrateRoot) { + renderer(rootElement, /*#__PURE__*/_react.default.createElement(App, null)); + } else { + renderer( /*#__PURE__*/_react.default.createElement(App, null), rootElement); + } + } // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450 + // TODO remove IE 10 support - if (process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR && process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`) { - const indicatorMountElement = document.createElement(`div`); - indicatorMountElement.setAttribute(`id`, `query-on-demand-indicator-element`); - document.body.append(indicatorMountElement); - _reactDom.default.render( /*#__PURE__*/_react.default.createElement(_loadingIndicator.LoadingIndicatorEventHandler, null), indicatorMountElement); - } - }); - }); + const doc = document; + + if (doc.readyState === `complete` || doc.readyState !== `loading` && !doc.documentElement.doScroll) { + setTimeout(function () { + runRender(); + }, 0); + } else { + const handler = function () { + doc.removeEventListener(`DOMContentLoaded`, handler, false); + window.removeEventListener(`load`, handler, false); + runRender(); + }; + + doc.addEventListener(`DOMContentLoaded`, handler, false); + window.addEventListener(`load`, handler, false); + } }); }); \ No newline at end of file diff --git a/.cache/commonjs/create-react-context.js b/.cache/commonjs/create-react-context.js deleted file mode 100644 index 3e87393..0000000 --- a/.cache/commonjs/create-react-context.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; - -/* - Why commonjs and not ES imports/exports? - - This module is used to alias `create-react-context` package, but drop the the actual implementation part - because Gatsby requires version of react that has implementatoin baked in. - - Package source is using ES modules: - - https://github.com/jamiebuilds/create-react-context/blob/v0.3.0/src/index.js - - But to build this package `babel-plugin-add-module-exports` is used ( https://www.npmjs.com/package/babel-plugin-add-module-exports). - Which result in both `module.exports` and `exports.default` being set to same thing. - - We don't use that babel plugin so we only have `exports.default`. - - This cause problems in various 3rd party react components that rely on `module.exports` being set. - See https://github.com/gatsbyjs/gatsby/issues/23645 for example of it. - - Instead of adding same babel plugin we mimic output here. Adding babel plugin just for this would: - a) unnecesairly slow down compilation for all other files (if we just apply it everywhere) - b) or complicate babel-loader configuration with overwrite specifically for this file -*/ -const { - createContext -} = require(`react`); - -module.exports = createContext; -module.exports.default = createContext; \ No newline at end of file diff --git a/.cache/commonjs/dev-loader.js b/.cache/commonjs/dev-loader.js index 7d5bd9a..ffe2463 100644 --- a/.cache/commonjs/dev-loader.js +++ b/.cache/commonjs/dev-loader.js @@ -16,6 +16,8 @@ var _normalizePagePath = _interopRequireDefault(require("./normalize-page-path") var _isEqual = _interopRequireDefault(require("lodash/isEqual")); // TODO move away from lodash +const preferDefault = m => m && m.default || m; + function mergePageEntry(cachedPage, newPageData) { return { ...cachedPage, payload: { ...cachedPage.payload, @@ -28,10 +30,18 @@ function mergePageEntry(cachedPage, newPageData) { } class DevLoader extends _loader.BaseLoader { - constructor(syncRequires, matchPaths) { - const loadComponent = chunkName => Promise.resolve(syncRequires.components[chunkName]); + constructor(asyncRequires, matchPaths) { + const loadComponent = chunkName => { + if (!this.asyncRequires.components[chunkName]) { + throw new Error(`We couldn't find the correct component chunk with the name "${chunkName}"`); + } + + return this.asyncRequires.components[chunkName]().then(preferDefault) // loader will handle the case when component is error + .catch(err => err); + }; super(loadComponent, matchPaths); + this.asyncRequires = asyncRequires; const socket = (0, _socketIo.default)(); this.notFoundPagePathsInCaches = new Set(); @@ -50,6 +60,10 @@ class DevLoader extends _loader.BaseLoader { } } + updateAsyncRequires(asyncRequires) { + this.asyncRequires = asyncRequires; + } + loadPage(pagePath) { const realPath = (0, _findPath.findPath)(pagePath); return super.loadPage(realPath).then(result => { diff --git a/.cache/commonjs/develop-static-entry.js b/.cache/commonjs/develop-static-entry.js index 0a3f52c..6170ad7 100644 --- a/.cache/commonjs/develop-static-entry.js +++ b/.cache/commonjs/develop-static-entry.js @@ -11,8 +11,9 @@ var _server = require("react-dom/server"); var _lodash = require("lodash"); -var _apiRunnerSsr = _interopRequireDefault(require("./api-runner-ssr")); +var _apiRunnerSsr = require("./api-runner-ssr"); +/* global BROWSER_ESM_ONLY */ // import testRequireError from "./test-require-error" // For some extremely mysterious reason, webpack adds the above module *after* // this module so that when this code runs, testRequireError is undefined. @@ -38,7 +39,9 @@ try { Html = Html && Html.__esModule ? Html.default : Html; -var _default = (pagePath, callback) => { +var _default = ({ + pagePath +}) => { let headComponents = [/*#__PURE__*/_react.default.createElement("meta", { key: "environment", name: "note", @@ -93,7 +96,7 @@ var _default = (pagePath, callback) => { postBodyComponents = components; }; - (0, _apiRunnerSsr.default)(`onRenderBody`, { + (0, _apiRunnerSsr.apiRunner)(`onRenderBody`, { setHeadComponents, setHtmlAttributes, setBodyAttributes, @@ -102,7 +105,7 @@ var _default = (pagePath, callback) => { setBodyProps, pathname: pagePath }); - (0, _apiRunnerSsr.default)(`onPreRenderHTML`, { + (0, _apiRunnerSsr.apiRunner)(`onPreRenderHTML`, { getHeadComponents, replaceHeadComponents, getPreBodyComponents, @@ -117,23 +120,30 @@ var _default = (pagePath, callback) => { headComponents: headComponents.concat([/*#__PURE__*/_react.default.createElement("script", { key: `io`, src: "/socket.io/socket.io.js" + }), /*#__PURE__*/_react.default.createElement("link", { + key: "styles", + rel: "stylesheet", + href: "/commons.css" })]), htmlAttributes, bodyAttributes, preBodyComponents, - postBodyComponents: postBodyComponents.concat([/*#__PURE__*/_react.default.createElement("script", { + postBodyComponents: postBodyComponents.concat([!BROWSER_ESM_ONLY && /*#__PURE__*/_react.default.createElement("script", { key: `polyfill`, src: "/polyfill.js", noModule: true + }), /*#__PURE__*/_react.default.createElement("script", { + key: `framework`, + src: "/framework.js" }), /*#__PURE__*/_react.default.createElement("script", { key: `commons`, src: "/commons.js" - })]) + })].filter(Boolean)) }); htmlStr = (0, _server.renderToStaticMarkup)(htmlElement); htmlStr = `${htmlStr}`; - callback(null, htmlStr); + return htmlStr; }; exports.default = _default; \ No newline at end of file diff --git a/.cache/commonjs/ensure-resources.js b/.cache/commonjs/ensure-resources.js index 6c941c6..55bcc33 100644 --- a/.cache/commonjs/ensure-resources.js +++ b/.cache/commonjs/ensure-resources.js @@ -1,7 +1,5 @@ "use strict"; -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; @@ -13,6 +11,10 @@ var _loader = _interopRequireWildcard(require("./loader")); var _shallowCompare = _interopRequireDefault(require("shallow-compare")); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + class EnsureResources extends _react.default.Component { constructor(props) { super(); @@ -23,7 +25,9 @@ class EnsureResources extends _react.default.Component { this.state = { location: { ...location }, - pageResources: pageResources || _loader.default.loadPageSync(location.pathname) + pageResources: pageResources || _loader.default.loadPageSync(location.pathname, { + withErrorDetails: true + }) }; } @@ -31,7 +35,9 @@ class EnsureResources extends _react.default.Component { location }, prevState) { if (prevState.location.href !== location.href) { - const pageResources = _loader.default.loadPageSync(location.pathname); + const pageResources = _loader.default.loadPageSync(location.pathname, { + withErrorDetails: true + }); return { pageResources, @@ -96,10 +102,19 @@ class EnsureResources extends _react.default.Component { } render() { - if (process.env.NODE_ENV !== `production` && !this.state.pageResources) { - throw new Error(`EnsureResources was not able to find resources for path: "${this.props.location.pathname}" + if (process.env.NODE_ENV !== `production` && (!this.state.pageResources || this.state.pageResources.status === _loader.PageResourceStatus.Error)) { + var _this$state$pageResou; + + const message = `EnsureResources was not able to find resources for path: "${this.props.location.pathname}" This typically means that an issue occurred building components for that path. -Run \`gatsby clean\` to remove any cached elements.`); +Run \`gatsby clean\` to remove any cached elements.`; + + if ((_this$state$pageResou = this.state.pageResources) !== null && _this$state$pageResou !== void 0 && _this$state$pageResou.error) { + console.error(message); + throw this.state.pageResources.error; + } + + throw new Error(message); } return this.props.children(this.state); diff --git a/.cache/commonjs/error-overlay-handler.js b/.cache/commonjs/error-overlay-handler.js index eaf8273..a0b6ac6 100644 --- a/.cache/commonjs/error-overlay-handler.js +++ b/.cache/commonjs/error-overlay-handler.js @@ -1,55 +1,26 @@ "use strict"; exports.__esModule = true; -exports.errorMap = exports.reportError = exports.clearError = void 0; -const overlayPackage = process.env.GATSBY_HOT_LOADER !== `fast-refresh` ? require(`react-error-overlay`) : require(`@pmmmwh/react-refresh-webpack-plugin/overlay`); -const ErrorOverlay = { - showCompileError: process.env.GATSBY_HOT_LOADER !== `fast-refresh` ? overlayPackage.reportBuildError : overlayPackage.showCompileError, - clearCompileError: process.env.GATSBY_HOT_LOADER !== `fast-refresh` ? overlayPackage.dismissBuildError : overlayPackage.clearCompileError -}; - -if (process.env.GATSBY_HOT_LOADER !== `fast-refresh`) { - // Report runtime errors - overlayPackage.startReportingRuntimeErrors({ - onError: () => {}, - filename: `/commons.js` - }); - overlayPackage.setEditorHandler(errorLocation => window.fetch(`/__open-stack-frame-in-editor?fileName=` + window.encodeURIComponent(errorLocation.fileName) + `&lineNumber=` + window.encodeURIComponent(errorLocation.lineNumber || 1))); -} - +exports.reportError = exports.clearError = void 0; const errorMap = {}; -exports.errorMap = errorMap; - -function flat(arr) { - return Array.prototype.flat ? arr.flat() : [].concat(...arr); -} const handleErrorOverlay = () => { const errors = Object.values(errorMap); - let errorStringsToDisplay = []; + let errorsToDisplay = []; if (errors.length > 0) { - errorStringsToDisplay = flat(errors).map(error => { - if (typeof error === `string`) { - return error; - } else if (typeof error === `object`) { - const errorStrBuilder = [error.text]; - - if (error.filePath) { - errorStrBuilder.push(`File: ${error.filePath}`); - } - - return errorStrBuilder.join(`\n\n`); - } - - return null; - }).filter(Boolean); + errorsToDisplay = errors.flatMap(e => e).filter(Boolean); } - if (errorStringsToDisplay.length > 0) { - ErrorOverlay.showCompileError(errorStringsToDisplay.join(`\n\n`)); + if (errorsToDisplay.length > 0) { + window._gatsbyEvents.push([`FAST_REFRESH`, { + action: `SHOW_GRAPHQL_ERRORS`, + payload: errorsToDisplay + }]); } else { - ErrorOverlay.clearCompileError(); + window._gatsbyEvents.push([`FAST_REFRESH`, { + action: `CLEAR_GRAPHQL_ERRORS` + }]); } }; diff --git a/.cache/commonjs/fast-refresh-overlay/components/build-error.js b/.cache/commonjs/fast-refresh-overlay/components/build-error.js index 34938ff..69bcb61 100644 --- a/.cache/commonjs/fast-refresh-overlay/components/build-error.js +++ b/.cache/commonjs/fast-refresh-overlay/components/build-error.js @@ -1,57 +1,52 @@ "use strict"; -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - exports.__esModule = true; -exports.default = void 0; - -var _react = _interopRequireDefault(require("react")); +exports.BuildError = BuildError; -var _overlay = _interopRequireDefault(require("./overlay")); +var React = _interopRequireWildcard(require("react")); -var _anser = _interopRequireDefault(require("anser")); +var _overlay = require("./overlay"); -var _codeFrame = _interopRequireDefault(require("./code-frame")); +var _codeFrame = require("./code-frame"); var _utils = require("../utils"); -const BuildError = ({ - error, - open, - dismiss -}) => { - var _detailedError$filter; - - const [file, cause, _emptyLine, ...rest] = error.split(`\n`); - const [_fullPath, _detailedError] = rest; - - const detailedError = _anser.default.ansiToJson(_detailedError, { - remove_empty: true, - json: true - }); - - const lineNumberRegex = /^[0-9]*:[0-9]*$/g; - const lineNumberFiltered = (_detailedError$filter = detailedError.filter(d => d.content !== ` ` && d.content.match(lineNumberRegex))[0]) === null || _detailedError$filter === void 0 ? void 0 : _detailedError$filter.content; - const lineNumber = lineNumberFiltered.substr(0, lineNumberFiltered.indexOf(`:`)); - const decoded = (0, _utils.prettifyStack)(rest); - - const header = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +// Error that is thrown on e.g. webpack errors and thus can't be dismissed and must be fixed +function BuildError({ + error +}) { + // Incoming build error shape is like this: + // Sometimes "Enter" + // ./relative-path-to-file + // Additional information (sometimes empty line => handled in "prettifyStack" function) + // /absolute-path-to-file + // Errors/Warnings + const decoded = (0, _utils.prettifyStack)(error); + const [filePath] = decoded; + const file = filePath.content.split(`\n`)[0]; + const lineMatch = filePath.content.match(/\((\d+)[^)]+\)/); + let line = 1; + + if (lineMatch) { + line = lineMatch[1]; + } + + return /*#__PURE__*/React.createElement(_overlay.Overlay, null, /*#__PURE__*/React.createElement(_overlay.Header, { + "data-gatsby-error-type": "build-error" + }, /*#__PURE__*/React.createElement("div", { "data-gatsby-overlay": "header__cause-file" - }, /*#__PURE__*/_react.default.createElement("p", null, cause), /*#__PURE__*/_react.default.createElement("span", null, file)), /*#__PURE__*/_react.default.createElement("button", { - onClick: () => open(file, lineNumber), - "data-gatsby-overlay": "header__open-in-editor" - }, "Open in editor")); - - const body = /*#__PURE__*/_react.default.createElement(_codeFrame.default, { + }, /*#__PURE__*/React.createElement("h1", { + id: "gatsby-overlay-labelledby" + }, "Failed to compile"), /*#__PURE__*/React.createElement("span", null, file)), /*#__PURE__*/React.createElement(_overlay.HeaderOpenClose, { + open: () => (0, _utils.openInEditor)(file, line), + dismiss: false + })), /*#__PURE__*/React.createElement(_overlay.Body, null, /*#__PURE__*/React.createElement("h2", null, "Source"), /*#__PURE__*/React.createElement(_codeFrame.CodeFrame, { decoded: decoded - }); - - return /*#__PURE__*/_react.default.createElement(_overlay.default, { - header: header, - body: body, - dismiss: dismiss - }); -}; - -var _default = BuildError; -exports.default = _default; \ No newline at end of file + }), /*#__PURE__*/React.createElement(_overlay.Footer, { + id: "gatsby-overlay-describedby" + }, "This error occurred during the build process and can only be dismissed by fixing the error."))); +} \ No newline at end of file diff --git a/.cache/commonjs/fast-refresh-overlay/components/code-frame.js b/.cache/commonjs/fast-refresh-overlay/components/code-frame.js index 0ba626d..516f8e8 100644 --- a/.cache/commonjs/fast-refresh-overlay/components/code-frame.js +++ b/.cache/commonjs/fast-refresh-overlay/components/code-frame.js @@ -1,30 +1,42 @@ "use strict"; -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - exports.__esModule = true; -exports.default = void 0; +exports.CodeFrame = CodeFrame; + +var React = _interopRequireWildcard(require("react")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } -var _react = _interopRequireDefault(require("react")); +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -const CodeFrame = ({ +function CodeFrame({ decoded -}) => /*#__PURE__*/_react.default.createElement("pre", { - "data-gatsby-overlay": "pre" -}, /*#__PURE__*/_react.default.createElement("code", { - "data-gatsby-overlay": "pre__code" -}, decoded ? decoded.map((entry, index) => /*#__PURE__*/_react.default.createElement("span", { - key: `frame-${index}`, - "data-gatsby-overlay": "pre__code__span", - style: { - color: entry.fg ? `var(--color-${entry.fg})` : undefined, - ...(entry.decoration === `bold` ? { - fontWeight: 800 - } : entry.decoration === `italic` ? { - fontStyle: `italic` - } : undefined) +}) { + if (!decoded) { + return /*#__PURE__*/React.createElement("pre", { + "data-gatsby-overlay": "pre" + }, /*#__PURE__*/React.createElement("code", { + "data-gatsby-overlay": "pre__code" + })); } -}, entry.content)) : null)); -var _default = CodeFrame; -exports.default = _default; \ No newline at end of file + return /*#__PURE__*/React.createElement("pre", { + "data-gatsby-overlay": "pre" + }, /*#__PURE__*/React.createElement("code", { + "data-gatsby-overlay": "pre__code" + }, decoded.map((entry, index) => { + const style = { + color: entry.fg ? `var(--color-${entry.fg})` : undefined, + ...(entry.decoration === `bold` ? { + fontWeight: 800 + } : entry.decoration === `italic` ? { + fontStyle: `italic` + } : undefined) + }; + return /*#__PURE__*/React.createElement("span", { + key: `frame-${index}`, + "data-gatsby-overlay": "pre__code__span", + style: style + }, entry.content); + }))); +} \ No newline at end of file diff --git a/.cache/commonjs/fast-refresh-overlay/components/error-boundary.js b/.cache/commonjs/fast-refresh-overlay/components/error-boundary.js index 169d8ba..91eb691 100644 --- a/.cache/commonjs/fast-refresh-overlay/components/error-boundary.js +++ b/.cache/commonjs/fast-refresh-overlay/components/error-boundary.js @@ -1,39 +1,33 @@ "use strict"; -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - exports.__esModule = true; -exports.default = void 0; +exports.ErrorBoundary = void 0; + +var React = _interopRequireWildcard(require("react")); -var _react = _interopRequireDefault(require("react")); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } -class ErrorBoundary extends _react.default.Component { +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +class ErrorBoundary extends React.Component { constructor(...args) { super(...args); this.state = { - hasError: false + error: null }; } componentDidCatch(error) { - this.props.onError(error); - } - - componentDidMount() { - this.props.clearErrors(); - } - - static getDerivedStateFromError() { - return { - hasError: true - }; + this.setState({ + error + }); } render() { - return this.state.hasError ? null : this.props.children; + // Without this check => possible infinite loop + return this.state.error && this.props.hasErrors ? null : this.props.children; } } -var _default = ErrorBoundary; -exports.default = _default; \ No newline at end of file +exports.ErrorBoundary = ErrorBoundary; \ No newline at end of file diff --git a/.cache/commonjs/fast-refresh-overlay/components/overlay.js b/.cache/commonjs/fast-refresh-overlay/components/overlay.js index 8c0e145..08d7945 100644 --- a/.cache/commonjs/fast-refresh-overlay/components/overlay.js +++ b/.cache/commonjs/fast-refresh-overlay/components/overlay.js @@ -3,46 +3,159 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; -exports.default = Overlay; +exports.VisuallyHidden = VisuallyHidden; +exports.Overlay = Overlay; +exports.CloseButton = CloseButton; +exports.HeaderOpenClose = HeaderOpenClose; +exports.Header = Header; +exports.Body = Body; +exports.Footer = Footer; -var _react = _interopRequireDefault(require("react")); +var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); + +var React = _interopRequireWildcard(require("react")); + +var _lockBody = require("../helpers/lock-body"); + +var _focusTrap = _interopRequireDefault(require("../helpers/focus-trap")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function Backdrop() { + return /*#__PURE__*/React.createElement("div", { + "data-gatsby-overlay": "backdrop" + }); +} + +function VisuallyHidden({ + children +}) { + return /*#__PURE__*/React.createElement("span", { + style: { + border: 0, + clip: `rect(0 0 0 0)`, + height: `1px`, + margin: `-1px`, + overflow: `hidden`, + padding: 0, + position: `absolute`, + width: `1px`, + whiteSpace: `nowrap`, + wordWrap: `normal` + } + }, children); +} function Overlay({ - header, - body, - dismiss + children }) { - return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { - "data-gatsby-overlay": "backdrop" - }), /*#__PURE__*/_react.default.createElement("div", { + React.useEffect(() => { + (0, _lockBody.lock)(); + return () => { + (0, _lockBody.unlock)(); + }; + }, []); + const [overlay, setOverlay] = React.useState(null); + const onOverlay = React.useCallback(el => { + setOverlay(el); + }, []); + React.useEffect(() => { + if (overlay === null) { + return; + } + + const handle = (0, _focusTrap.default)({ + context: overlay + }); // eslint-disable-next-line consistent-return + + return () => { + handle.disengage(); + }; + }, [overlay]); + return /*#__PURE__*/React.createElement("div", { + "data-gatsby-overlay": "wrapper", + ref: onOverlay + }, /*#__PURE__*/React.createElement(Backdrop, null), /*#__PURE__*/React.createElement("div", { "data-gatsby-overlay": "root", - role: "dialog", - "aria-modal": "true" - }, /*#__PURE__*/_react.default.createElement("div", { - "data-gatsby-overlay": "header" - }, header, /*#__PURE__*/_react.default.createElement("button", { - "data-gatsby-overlay": "header__close-button", - "aria-label": "Close error overlay", + role: "alertdialog", + "aria-labelledby": "gatsby-overlay-labelledby", + "aria-describedby": "gatsby-overlay-describedby", + "aria-modal": "true", + dir: "ltr" + }, children)); +} + +function CloseButton({ + dismiss +}) { + return /*#__PURE__*/React.createElement("button", { + "data-gatsby-overlay": "close-button", onClick: dismiss - }, /*#__PURE__*/_react.default.createElement("svg", { + }, /*#__PURE__*/React.createElement(VisuallyHidden, null, "Close"), /*#__PURE__*/React.createElement("svg", { + "aria-hidden": true, width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, /*#__PURE__*/_react.default.createElement("path", { + }, /*#__PURE__*/React.createElement("path", { d: "M18 6L6 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" - }), /*#__PURE__*/_react.default.createElement("path", { + }), /*#__PURE__*/React.createElement("path", { d: "M6 6L18 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" - })))), /*#__PURE__*/_react.default.createElement("div", { + }))); +} + +function HeaderOpenClose({ + open, + dismiss, + children, + ...rest +}) { + return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({ + "data-gatsby-overlay": "header__top" + }, rest), children, /*#__PURE__*/React.createElement("div", { + "data-gatsby-overlay": "header__open-close" + }, open && /*#__PURE__*/React.createElement("button", { + onClick: open, + "data-gatsby-overlay": "primary-button" + }, "Open in editor"), dismiss && /*#__PURE__*/React.createElement(CloseButton, { + dismiss: dismiss + }))); +} + +function Header({ + children, + ...rest +}) { + return /*#__PURE__*/React.createElement("header", (0, _extends2.default)({ + "data-gatsby-overlay": "header" + }, rest), children); +} + +function Body({ + children, + ...rest +}) { + return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({ "data-gatsby-overlay": "body" - }, body))); + }, rest), children); +} + +function Footer({ + children, + ...rest +}) { + return /*#__PURE__*/React.createElement("footer", (0, _extends2.default)({ + "data-gatsby-overlay": "footer" + }, rest), children); } \ No newline at end of file diff --git a/.cache/commonjs/fast-refresh-overlay/components/portal.js b/.cache/commonjs/fast-refresh-overlay/components/portal.js deleted file mode 100644 index 1fb7a21..0000000 --- a/.cache/commonjs/fast-refresh-overlay/components/portal.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; - -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - -exports.__esModule = true; -exports.default = void 0; - -var React = _interopRequireWildcard(require("react")); - -var _reactDom = require("react-dom"); - -const ShadowPortal = function Portal({ - children -}) { - const mountNode = React.useRef(null); - const portalNode = React.useRef(null); - const shadowNode = React.useRef(null); - const [, forceUpdate] = React.useState(); - React.useLayoutEffect(() => { - const ownerDocument = mountNode.current.ownerDocument; - portalNode.current = ownerDocument.createElement(`gatsby-portal`); - shadowNode.current = portalNode.current.attachShadow({ - mode: `open` - }); - ownerDocument.body.appendChild(portalNode.current); - forceUpdate({}); - return () => { - if (portalNode.current && portalNode.current.ownerDocument) { - portalNode.current.ownerDocument.body.removeChild(portalNode.current); - } - }; - }, []); - return shadowNode.current ? /*#__PURE__*/(0, _reactDom.createPortal)(children, shadowNode.current) : /*#__PURE__*/React.createElement("span", { - ref: mountNode - }); -}; - -var _default = ShadowPortal; -exports.default = _default; \ No newline at end of file diff --git a/.cache/commonjs/fast-refresh-overlay/components/runtime-error.js b/.cache/commonjs/fast-refresh-overlay/components/runtime-error.js deleted file mode 100644 index 083b2ed..0000000 --- a/.cache/commonjs/fast-refresh-overlay/components/runtime-error.js +++ /dev/null @@ -1,125 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -exports.__esModule = true; -exports.default = void 0; - -var _react = _interopRequireDefault(require("react")); - -var _stackTrace = _interopRequireDefault(require("stack-trace")); - -var _overlay = _interopRequireDefault(require("./overlay")); - -var _utils = require("../utils"); - -var _codeFrame = _interopRequireDefault(require("./code-frame")); - -function formatFilename(filename) { - const htmlMatch = /^https?:\/\/(.*)\/(.*)/.exec(filename); - - if (htmlMatch && htmlMatch[1] && htmlMatch[2]) { - return htmlMatch[2]; - } - - const sourceMatch = /^webpack-internal:\/\/\/(.*)$/.exec(filename); - - if (sourceMatch && sourceMatch[1]) { - return sourceMatch[1]; - } - - return filename; -} - -const useFetch = url => { - const [response, setResponse] = _react.default.useState({ - decoded: null, - sourcePosition: { - line: null, - number: null - }, - sourceContent: null - }); - - _react.default.useEffect(() => { - async function fetchData() { - const res = await fetch(url); - const json = await res.json(); - const decoded = (0, _utils.prettifyStack)(json.codeFrame); - const { - sourcePosition, - sourceContent - } = json; - setResponse({ - decoded, - sourceContent, - sourcePosition - }); - } - - fetchData(); - }, []); - - return response; -}; - -function getCodeFrameInformation(stackTrace) { - const callSite = stackTrace.find(CallSite => CallSite.getFileName()); - - if (!callSite) { - return null; - } - - const moduleId = formatFilename(callSite.getFileName()); - const lineNumber = callSite.getLineNumber(); - const columnNumber = callSite.getColumnNumber(); - const functionName = callSite.getFunctionName(); - return { - moduleId, - lineNumber, - columnNumber, - functionName - }; -} - -const RuntimeError = ({ - error, - open, - dismiss -}) => { - const stacktrace = _stackTrace.default.parse(error.error); - - const { - moduleId, - lineNumber, - columnNumber, - functionName - } = getCodeFrameInformation(stacktrace); - const res = useFetch(`/__original-stack-frame?moduleId=` + window.encodeURIComponent(moduleId) + `&lineNumber=` + window.encodeURIComponent(lineNumber) + `&columnNumber=` + window.encodeURIComponent(columnNumber)); - - const header = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { - "data-gatsby-overlay": "header__cause-file" - }, /*#__PURE__*/_react.default.createElement("p", null, "Unhandled Runtime Error"), /*#__PURE__*/_react.default.createElement("span", null, moduleId)), /*#__PURE__*/_react.default.createElement("button", { - onClick: () => open(moduleId, res.sourcePosition.line), - "data-gatsby-overlay": "header__open-in-editor" - }, "Open in editor")); - - const body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", { - "data-gatsby-overlay": "body__error-message-header" - }, "Error in function ", /*#__PURE__*/_react.default.createElement("span", { - "data-font-weight": "bold" - }, functionName)), /*#__PURE__*/_react.default.createElement("p", { - "data-gatsby-overlay": "body__error-message" - }, error.error.message), /*#__PURE__*/_react.default.createElement(_codeFrame.default, { - decoded: res.decoded - })); - - return /*#__PURE__*/_react.default.createElement(_overlay.default, { - header: header, - body: body, - dismiss: dismiss - }); -}; - -var _default = RuntimeError; -exports.default = _default; \ No newline at end of file diff --git a/.cache/commonjs/fast-refresh-overlay/components/style.js b/.cache/commonjs/fast-refresh-overlay/components/style.js deleted file mode 100644 index c75cf30..0000000 --- a/.cache/commonjs/fast-refresh-overlay/components/style.js +++ /dev/null @@ -1,173 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -exports.__esModule = true; -exports.default = void 0; - -var _react = _interopRequireDefault(require("react")); - -function css(strings, ...keys) { - const lastIndex = strings.length - 1; - return strings.slice(0, lastIndex).reduce((p, s, i) => p + s + keys[i], ``) + strings[lastIndex]; -} - -const Style = () => /*#__PURE__*/_react.default.createElement("style", { - dangerouslySetInnerHTML: { - __html: css` - :host { - --gatsby: #663399; - --gatsbyLight: #9158ca; - --dimmedWhite: rgba(255, 255, 255, 0.8); - --white: #ffffff; - --black: #000000; - --color-ansi-selection: rgba(95, 126, 151, 0.48); - --color-ansi-bg: #fafafa; - --color-ansi-fg: #545454; - --color-ansi-white: #969896; - --color-ansi-black: #141414; - --color-ansi-blue: #183691; - --color-ansi-cyan: #007faa; - --color-ansi-green: #008000; - --color-ansi-magenta: #795da3; - --color-ansi-red: #d91e18; - --color-ansi-yellow: #aa5d00; - --color-ansi-bright-white: #ffffff; - --color-ansi-bright-black: #545454; - --color-ansi-bright-blue: #183691; - --color-ansi-bright-cyan: #007faa; - --color-ansi-bright-green: #008000; - --color-ansi-bright-magenta: #795da3; - --color-ansi-bright-red: #d91e18; - --color-ansi-bright-yellow: #aa5d00; - --radii: 5px; - --z-index-normal: 5; - --z-index-elevated: 10; - --space: 1.5em; - --space-sm: 1em; - --space-lg: 2.5em; - } - - [data-gatsby-overlay="backdrop"] { - background: rgba(72, 67, 79, 0.5); - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - height: 100%; - width: 100%; - z-index: var(--z-index-normal); - backdrop-filter: blur(10px); - } - - [data-gatsby-overlay="root"] { - font: 18px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", - "Segoe UI Symbol" !important; - background: var(--color-ansi-bright-white); - position: fixed; - max-width: 75%; - min-width: 600px; - max-height: 90%; - top: 50%; - left: 50%; - transform: translateX(-50%) translateY(-50%); - box-shadow: rgba(46, 41, 51, 0.08) 0px 7px 19px 11px, - rgba(71, 63, 79, 0.08) 0px 2px 4px; - border-radius: var(--radii); - display: inline-flex; - flex-direction: column; - z-index: var(--z-index-elevated); - } - - [data-gatsby-overlay="header"] { - display: flex; - align-items: center; - color: var(--dimmedWhite); - background: var(--gatsby); - padding: var(--space); - border-top-left-radius: var(--radii); - border-top-right-radius: var(--radii); - } - - [data-gatsby-overlay="body"] { - padding: var(--space); - overflow: auto; - } - - [data-gatsby-overlay="body"] pre { - margin: 0; - color: var(--color-ansi-fg); - background: var(--color-ansi-bg); - padding: var(--space-sm); - border-radius: var(--radii); - } - - [data-gatsby-overlay="header__cause-file"] { - flex: 1; - } - - [data-gatsby-overlay="header__cause-file"] p { - margin-top: 0; - margin-bottom: 0; - } - - [data-gatsby-overlay="header__cause-file"] span { - font-size: 1.25em; - color: var(--white); - } - - [data-gatsby-overlay="header__open-in-editor"] { - align-items: center; - border-radius: var(--radii); - justify-content: center; - line-height: 1; - cursor: pointer; - color: var(--white); - border: 1px solid var(--gatsby); - background: var(--gatsbyLight); - font-size: 1em; - height: 2em; - min-width: 2em; - padding: 0.25em 0.75em; - margin-left: var(--space-lg); - } - - [data-gatsby-overlay="header__close-button"] { - cursor: pointer; - border: 0; - padding: 0; - background-color: var(--gatsbyLight); - color: var(--white); - appearance: none; - height: 36px; - width: 36px; - display: inline-flex; - align-items: center; - justify-content: center; - border-radius: var(--radii); - margin-left: 1rem; - } - - [data-gatsby-overlay="body__error-message-header"] { - margin-top: 0; - font-size: 1.2em; - color: var(--black); - margin-bottom: 0.25em; - } - - [data-gatsby-overlay="body__error-message"] { - margin-top: 0; - margin-bottom: 2em; - } - - [data-font-weight="bold"] { - font-weight: 600; - } - ` - } -}); - -var _default = Style; -exports.default = _default; \ No newline at end of file diff --git a/.cache/commonjs/fast-refresh-overlay/index.js b/.cache/commonjs/fast-refresh-overlay/index.js index a617adb..62f2a6e 100644 --- a/.cache/commonjs/fast-refresh-overlay/index.js +++ b/.cache/commonjs/fast-refresh-overlay/index.js @@ -1,136 +1,182 @@ "use strict"; -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - exports.__esModule = true; exports.default = void 0; -var _react = _interopRequireDefault(require("react")); - -var _client = _interopRequireDefault(require("webpack-hot-middleware/client")); +var React = _interopRequireWildcard(require("react")); -var _errorBoundary = _interopRequireDefault(require("./components/error-boundary")); +var _errorBoundary = require("./components/error-boundary"); -var _portal = _interopRequireDefault(require("./components/portal")); +var _shadowPortal = require("../shadow-portal"); -var _style = _interopRequireDefault(require("./components/style")); +var _style = require("./style"); -var _buildError = _interopRequireDefault(require("./components/build-error")); +var _buildError = require("./components/build-error"); -var _runtimeError = _interopRequireDefault(require("./components/runtime-error")); +var _runtimeErrors = require("./components/runtime-errors"); -class FastRefreshOverlay extends _react.default.Component { - constructor(...args) { - super(...args); - this.state = { - errors: [], - buildError: null, - currentIndex: 0 - }; - this._isMounted = false; - - this.dismiss = () => { - // eslint-disable-next-line no-invalid-this - this.setState({ - errors: [], - currenIndex: 0, - buildError: null - }); - }; +var _graphqlErrors = require("./components/graphql-errors"); - this.addBuildError = error => { - // eslint-disable-next-line no-invalid-this - this.setState({ - buildError: error - }); - }; +var _devSsrError = require("./components/dev-ssr-error"); - this.open = (file, lineNumber = 1) => { - window.fetch(`/__open-stack-frame-in-editor?fileName=` + window.encodeURIComponent(file) + `&lineNumber=` + window.encodeURIComponent(lineNumber)); - }; - } +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } - componentDidMount() { - this._isMounted = true; +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } - _client.default.useCustomOverlay({ - showProblems: (type, data) => { - if (this._isMounted) { - this.addBuildError(data[0]); - } - }, - // We rely on Fast Refresh notifying us on updates as HMR notification is "not at the right time" - clear: () => { - this.setState({ +const reducer = (state, event) => { + switch (event.action) { + case `CLEAR_COMPILE_ERROR`: + { + return { ...state, buildError: null - }); + }; } - }); // TODO: Maybe only do this? Investigate if third-party stuff should be visible - // window.addEventListener(`error`, error => { - // setProblems(s => - // s.concat({ - // type: `RUNTIME_ERROR`, - // error, - // }) - // ) - // }) - // TODO: Add e2e test case, e.g. useEffect in a component to fetch invalid URL - // window.addEventListener(`unhandledrejection`, error => { - // setProblems(s => - // s.concat({ - // type: `RUNTIME_ERROR`, - // error: error.reason, - // }) - // ) - // }) - } + case `CLEAR_RUNTIME_ERRORS`: + { + return { ...state, + errors: [] + }; + } - componentWillUnmount() { - this._isMounted = false; - } + case `CLEAR_DEV_SSR_ERROR`: + { + return { ...state, + devSsrError: null + }; + } + + case `SHOW_COMPILE_ERROR`: + { + return { ...state, + buildError: event.payload + }; + } + + case `SHOW_DEV_SSR_ERROR`: + { + return { ...state, + devSsrError: event.payload + }; + } + + case `HANDLE_RUNTIME_ERROR`: + case `SHOW_RUNTIME_ERRORS`: + { + return { ...state, + errors: state.errors.concat(event.payload) + }; + } - render() { - var _this$props$children; - - const { - errors, - currentIndex, - buildError - } = this.state; - const error = errors[currentIndex]; - const hasBuildError = buildError !== null; - const hasRuntimeError = Boolean(errors.length); - const hasErrors = hasBuildError || hasRuntimeError; - return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_errorBoundary.default, { - clearErrors: () => { - this.setState({ + case `SHOW_GRAPHQL_ERRORS`: + { + return { ...state, + graphqlErrors: event.payload + }; + } + + case `CLEAR_GRAPHQL_ERRORS`: + { + return { ...state, + graphqlErrors: [] + }; + } + + case `DISMISS`: + { + return { ...state, + buildError: null, errors: [], - buildError: null - }); - }, - onError: error => { - this.setState(prevState => { - const insertedError = { - type: `RUNTIME_ERROR`, - error - }; - return { - errors: [...prevState.errors, insertedError] - }; - }); + graphqlErrors: [] + }; + } + + default: + { + return state; } - }, (_this$props$children = this.props.children) !== null && _this$props$children !== void 0 ? _this$props$children : null), hasErrors ? /*#__PURE__*/_react.default.createElement(_portal.default, null, /*#__PURE__*/_react.default.createElement(_style.default, null), hasBuildError ? /*#__PURE__*/_react.default.createElement(_buildError.default, { - error: buildError, - open: this.open, - dismiss: this.dismiss - }) : hasRuntimeError ? /*#__PURE__*/_react.default.createElement(_runtimeError.default, { - error: error, - open: this.open, - dismiss: this.dismiss - }) : undefined) : undefined); } +}; + +const initialState = { + errors: [], + buildError: null, + devSsrError: null, + graphqlErrors: [] +}; + +function DevOverlay({ + children +}) { + const [state, dispatch] = React.useReducer(reducer, initialState); + React.useEffect(() => { + const gatsbyEvents = window._gatsbyEvents || []; + window._gatsbyEvents = { + push: ([channel, event]) => { + if (channel === `FAST_REFRESH`) { + dispatch(event); + } + } + }; + gatsbyEvents.forEach(([channel, event]) => { + if (channel === `FAST_REFRESH`) { + dispatch(event); + } + }); + return () => { + window._gatsbyEvents = []; + }; + }, [dispatch]); + + const dismiss = () => { + dispatch({ + action: `DISMISS` + }); + window._gatsbyEvents = []; + }; + + const hasBuildError = state.buildError !== null; + const hasRuntimeErrors = Boolean(state.errors.length); + const hasGraphqlErrors = Boolean(state.graphqlErrors.length); + const hasDevSsrError = state.devSsrError !== null; + const hasErrors = hasBuildError || hasRuntimeErrors || hasGraphqlErrors || hasDevSsrError; // This component has a deliberate order (priority) + + const ErrorComponent = () => { + if (hasBuildError) { + return /*#__PURE__*/React.createElement(_buildError.BuildError, { + error: state.buildError + }); + } + + if (hasRuntimeErrors) { + return /*#__PURE__*/React.createElement(_runtimeErrors.RuntimeErrors, { + errors: state.errors, + dismiss: dismiss + }); + } + + if (hasGraphqlErrors) { + return /*#__PURE__*/React.createElement(_graphqlErrors.GraphqlErrors, { + errors: state.graphqlErrors, + dismiss: dismiss + }); + } + + if (hasDevSsrError) { + return /*#__PURE__*/React.createElement(_devSsrError.DevSsrError, { + error: state.devSsrError + }); + } + + return null; + }; + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_errorBoundary.ErrorBoundary, { + hasErrors: hasErrors + }, children !== null && children !== void 0 ? children : null), hasErrors ? /*#__PURE__*/React.createElement(_shadowPortal.ShadowPortal, { + identifier: "gatsby-fast-refresh" + }, /*#__PURE__*/React.createElement(_style.Style, null), /*#__PURE__*/React.createElement(ErrorComponent, null)) : undefined); } -exports.default = FastRefreshOverlay; \ No newline at end of file +var _default = DevOverlay; +exports.default = _default; \ No newline at end of file diff --git a/.cache/commonjs/fast-refresh-overlay/utils.js b/.cache/commonjs/fast-refresh-overlay/utils.js index 4e2f62b..9db6b12 100644 --- a/.cache/commonjs/fast-refresh-overlay/utils.js +++ b/.cache/commonjs/fast-refresh-overlay/utils.js @@ -4,6 +4,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau exports.__esModule = true; exports.prettifyStack = prettifyStack; +exports.openInEditor = openInEditor; +exports.reloadPage = reloadPage; +exports.skipSSR = skipSSR; +exports.getCodeFrameInformation = getCodeFrameInformation; +exports.getLineNumber = getLineNumber; +exports.formatFilename = formatFilename; var _anser = _interopRequireDefault(require("anser")); @@ -21,4 +27,62 @@ function prettifyStack(errorInformation) { use_classes: true, json: true }); +} + +function openInEditor(file, lineNumber = 1) { + fetch(`/__open-stack-frame-in-editor?fileName=` + window.encodeURIComponent(file) + `&lineNumber=` + window.encodeURIComponent(lineNumber)); +} + +function reloadPage() { + window.location.reload(); +} + +function skipSSR() { + if (`URLSearchParams` in window) { + const searchParams = new URLSearchParams(window.location.search); + searchParams.set(`skip-ssr`, `true`); + window.location.search = searchParams.toString(); + } +} + +function getCodeFrameInformation(stackTrace) { + const callSite = stackTrace.find(CallSite => CallSite.getFileName()); + + if (!callSite) { + return null; + } + + const moduleId = formatFilename(callSite.getFileName()); + const lineNumber = callSite.getLineNumber(); + const columnNumber = callSite.getColumnNumber(); + const functionName = callSite.getFunctionName(); + return { + moduleId, + lineNumber, + columnNumber, + functionName + }; +} + +const lineNumberRegex = /^[0-9]*:[0-9]*$/g; + +function getLineNumber(error) { + const match = error.match(lineNumberRegex); + return match === null || match === void 0 ? void 0 : match[1]; +} + +function formatFilename(filename) { + const htmlMatch = /^https?:\/\/(.*)\/(.*)/.exec(filename); + + if (htmlMatch && htmlMatch[1] && htmlMatch[2]) { + return htmlMatch[2]; + } + + const sourceMatch = /^webpack-internal:\/\/\/(.*)$/.exec(filename); + + if (sourceMatch && sourceMatch[1]) { + return sourceMatch[1]; + } + + return filename; } \ No newline at end of file diff --git a/.cache/commonjs/find-path.js b/.cache/commonjs/find-path.js index 20ea2b5..16ee8d0 100644 --- a/.cache/commonjs/find-path.js +++ b/.cache/commonjs/find-path.js @@ -5,19 +5,21 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau exports.__esModule = true; exports.cleanPath = exports.findPath = exports.grabMatchParams = exports.findMatchPath = exports.setMatchPaths = void 0; -var _utils = require("@reach/router/lib/utils"); +var _utils = require("@gatsbyjs/reach-router/lib/utils"); var _stripPrefix = _interopRequireDefault(require("./strip-prefix")); var _normalizePagePath = _interopRequireDefault(require("./normalize-page-path")); +var _redirectUtils = require("./redirect-utils.js"); + const pathCache = new Map(); let matchPaths = []; const trimPathname = rawPathname => { const pathname = decodeURIComponent(rawPathname); // Remove the pathPrefix from the pathname. - const trimmedPathname = (0, _stripPrefix.default)(pathname, __BASE_PATH__) // Remove any hashfragment + const trimmedPathname = (0, _stripPrefix.default)(pathname, decodeURIComponent(__BASE_PATH__)) // Remove any hashfragment .split(`#`)[0] // Remove search query .split(`?`)[0]; return trimmedPathname; @@ -124,6 +126,12 @@ const findPath = rawPathname => { return pathCache.get(trimmedPathname); } + const redirect = (0, _redirectUtils.maybeGetBrowserRedirect)(rawPathname); + + if (redirect) { + return findPath(redirect.toPath); + } + let foundPath = findMatchPath(trimmedPathname); if (!foundPath) { diff --git a/.cache/commonjs/gatsby-browser-entry.js b/.cache/commonjs/gatsby-browser-entry.js index 67bee57..722d677 100644 --- a/.cache/commonjs/gatsby-browser-entry.js +++ b/.cache/commonjs/gatsby-browser-entry.js @@ -1,7 +1,5 @@ "use strict"; -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; @@ -18,9 +16,6 @@ exports.Link = _gatsbyLink.default; exports.withPrefix = _gatsbyLink.withPrefix; exports.withAssetPrefix = _gatsbyLink.withAssetPrefix; exports.navigate = _gatsbyLink.navigate; -exports.push = _gatsbyLink.push; -exports.replace = _gatsbyLink.replace; -exports.navigateTo = _gatsbyLink.navigateTo; exports.parsePath = _gatsbyLink.parsePath; var _gatsbyReactRouterScroll = require("gatsby-react-router-scroll"); @@ -33,6 +28,10 @@ exports.PageRenderer = _publicPageRenderer.default; var _loader = _interopRequireDefault(require("./loader")); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + const prefetchPathname = _loader.default.enqueue; exports.prefetchPathname = prefetchPathname; @@ -88,7 +87,7 @@ useStaticQuery(graphql\`${query}\`); `); } - if ((_context$query = context[query]) === null || _context$query === void 0 ? void 0 : _context$query.data) { + if ((_context$query = context[query]) !== null && _context$query !== void 0 && _context$query.data) { return context[query].data; } else { throw new Error(`The result of this StaticQuery could not be fetched.\n\n` + `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` + `please open an issue in https://github.com/gatsbyjs/gatsby/issues`); diff --git a/.cache/commonjs/loader.js b/.cache/commonjs/loader.js index 343d65e..01db7b9 100644 --- a/.cache/commonjs/loader.js +++ b/.cache/commonjs/loader.js @@ -233,6 +233,13 @@ class BaseLoader { const page = this.pageDb.get(pagePath); if (process.env.BUILD_STAGE !== `develop` || !page.payload.stale) { + if (page.error) { + return { + error: page.error, + status: page.status + }; + } + return Promise.resolve(page.payload); } } @@ -260,8 +267,9 @@ class BaseLoader { finalResult.createdAt = new Date(); let pageResources; - if (!component) { + if (!component || component instanceof Error) { finalResult.status = PageResourceStatus.Error; + finalResult.error = component; } else { finalResult.status = PageResourceStatus.Success; @@ -294,6 +302,8 @@ class BaseLoader { staticQueryHash, jsonPayload }; + }).catch(() => { + throw new Error(`We couldn't load "${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json"`); }); })).then(staticQueryResults => { const staticQueryResultsMap = {}; @@ -322,10 +332,24 @@ class BaseLoader { } this.pageDb.set(pagePath, finalResult); + + if (finalResult.error) { + return { + error: finalResult.error, + status: finalResult.status + }; + } + return payload; + }) // when static-query fail to load we throw a better error + .catch(err => { + return { + error: err, + status: PageResourceStatus.Error + }; }); }); - inFlightPromise.then(response => { + inFlightPromise.then(() => { this.inFlightDb.delete(pagePath); }).catch(error => { this.inFlightDb.delete(pagePath); @@ -333,15 +357,25 @@ class BaseLoader { }); this.inFlightDb.set(pagePath, inFlightPromise); return inFlightPromise; - } // returns undefined if loading page ran into errors + } // returns undefined if the page does not exists in cache - loadPageSync(rawPath) { + loadPageSync(rawPath, options = {}) { const pagePath = (0, _findPath.findPath)(rawPath); if (this.pageDb.has(pagePath)) { - const pageData = this.pageDb.get(pagePath).payload; - return pageData; + const pageData = this.pageDb.get(pagePath); + + if (pageData.payload) { + return pageData.payload; + } + + if (options !== null && options !== void 0 && options.withErrorDetails) { + return { + error: pageData.error, + status: pageData.status + }; + } } return undefined; @@ -464,11 +498,25 @@ exports.BaseLoader = BaseLoader; const createComponentUrls = componentChunkName => (window.___chunkMapping[componentChunkName] || []).map(chunk => __PATH_PREFIX__ + chunk); class ProdLoader extends BaseLoader { - constructor(asyncRequires, matchPaths) { - const loadComponent = chunkName => asyncRequires.components[chunkName] ? asyncRequires.components[chunkName]().then(preferDefault) // loader will handle the case when component is null - .catch(() => null) : Promise.resolve(); + constructor(asyncRequires, matchPaths, pageData) { + const loadComponent = chunkName => { + if (!asyncRequires.components[chunkName]) { + throw new Error(`We couldn't find the correct component chunk with the name ${chunkName}`); + } + + return asyncRequires.components[chunkName]().then(preferDefault) // loader will handle the case when component is error + .catch(err => err); + }; super(loadComponent, matchPaths); + + if (pageData) { + this.pageDataDb.set(pageData.path, { + pagePath: pageData.path, + payload: pageData, + status: `success` + }); + } } doPrefetch(pagePath) { @@ -520,22 +568,12 @@ const setLoader = _loader => { exports.setLoader = setLoader; const publicLoader = { - // Deprecated methods. As far as we're aware, these are only used by - // core gatsby and the offline plugin, however there's a very small - // chance they're called by others. - getResourcesForPathname: rawPath => { - console.warn(`Warning: getResourcesForPathname is deprecated. Use loadPage instead`); - return instance.i.loadPage(rawPath); - }, - getResourcesForPathnameSync: rawPath => { - console.warn(`Warning: getResourcesForPathnameSync is deprecated. Use loadPageSync instead`); - return instance.i.loadPageSync(rawPath); - }, enqueue: rawPath => instance.prefetch(rawPath), // Real methods getResourceURLsForPathname: rawPath => instance.getResourceURLsForPathname(rawPath), loadPage: rawPath => instance.loadPage(rawPath), - loadPageSync: rawPath => instance.loadPageSync(rawPath), + // TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour + loadPageSync: (rawPath, options = {}) => instance.loadPageSync(rawPath, options), prefetch: rawPath => instance.prefetch(rawPath), isPageNotFound: rawPath => instance.isPageNotFound(rawPath), hovering: rawPath => instance.hovering(rawPath), diff --git a/.cache/commonjs/loading-indicator/index.js b/.cache/commonjs/loading-indicator/index.js index c272b29..9d30572 100644 --- a/.cache/commonjs/loading-indicator/index.js +++ b/.cache/commonjs/loading-indicator/index.js @@ -3,53 +3,32 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; -exports.LoadingIndicatorEventHandler = void 0; +exports.LoadingIndicatorEventHandler = LoadingIndicatorEventHandler; -var _react = _interopRequireDefault(require("react")); +var React = _interopRequireWildcard(require("react")); var _emitter = _interopRequireDefault(require("../emitter")); var _indicator = require("./indicator"); -// no hooks because we support react versions without hooks support -class LoadingIndicatorEventHandler extends _react.default.Component { - constructor(...args) { - super(...args); - this.state = { - visible: false - }; - - this.show = () => { - this.setState({ - visible: true - }); - }; - - this.hide = () => { - this.setState({ - visible: false - }); - }; - } - - componentDidMount() { - _emitter.default.on(`onDelayedLoadPageResources`, this.show); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } - _emitter.default.on(`onRouteUpdate`, this.hide); - } +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } - componentWillUnmount() { - _emitter.default.off(`onDelayedLoadPageResources`, this.show); +function LoadingIndicatorEventHandler() { + const [visible, setVisible] = React.useState(false); + React.useEffect(() => { + _emitter.default.on(`onDelayedLoadPageResources`, () => setVisible(true)); - _emitter.default.off(`onRouteUpdate`, this.hide); - } + _emitter.default.on(`onRouteUpdate`, () => setVisible(false)); - render() { - return /*#__PURE__*/_react.default.createElement(_indicator.Indicator, { - visible: this.state.visible - }); - } + return () => { + _emitter.default.off(`onDelayedLoadPageResources`, () => setVisible(true)); -} - -exports.LoadingIndicatorEventHandler = LoadingIndicatorEventHandler; \ No newline at end of file + _emitter.default.off(`onRouteUpdate`, () => setVisible(false)); + }; + }, []); + return /*#__PURE__*/React.createElement(_indicator.Indicator, { + visible: visible + }); +} \ No newline at end of file diff --git a/.cache/commonjs/loading-indicator/indicator.js b/.cache/commonjs/loading-indicator/indicator.js index 7f9cf6e..8c6eb28 100644 --- a/.cache/commonjs/loading-indicator/indicator.js +++ b/.cache/commonjs/loading-indicator/indicator.js @@ -1,20 +1,22 @@ "use strict"; -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - exports.__esModule = true; exports.Indicator = Indicator; -var _react = _interopRequireDefault(require("react")); +var React = _interopRequireWildcard(require("react")); -var _portal = _interopRequireDefault(require("./portal")); +var _shadowPortal = require("../shadow-portal"); -var _style = _interopRequireDefault(require("./style")); +var _style = require("./style"); var _loadingIndicator = require("$virtual/loading-indicator"); var _debugLog = require("../debug-log"); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + if (typeof window === `undefined`) { throw new Error(`Loading indicator should never be imported in code that doesn't target only browsers`); } @@ -45,24 +47,26 @@ function Indicator({ window.___gatsbyDidShowLoadingIndicatorBefore = true; } - return /*#__PURE__*/_react.default.createElement(_portal.default, null, /*#__PURE__*/_react.default.createElement(_style.default, null), /*#__PURE__*/_react.default.createElement("div", { + return /*#__PURE__*/React.createElement(_shadowPortal.ShadowPortal, { + identifier: "gatsby-qod" + }, /*#__PURE__*/React.createElement(_style.Style, null), /*#__PURE__*/React.createElement("div", { "data-gatsby-loading-indicator": "root" // preact doesn't render data attributes with a literal bool false value to dom , "data-gatsby-loading-indicator-visible": visible.toString(), "aria-live": "assertive" - }, /*#__PURE__*/_react.default.createElement("div", { + }, /*#__PURE__*/React.createElement("div", { "data-gatsby-loading-indicator": "spinner", "aria-hidden": "true" - }, /*#__PURE__*/_react.default.createElement("svg", { + }, /*#__PURE__*/React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor" - }, /*#__PURE__*/_react.default.createElement("path", { + }, /*#__PURE__*/React.createElement("path", { d: "M0 0h24v24H0z", fill: "none" - }), /*#__PURE__*/_react.default.createElement("path", { + }), /*#__PURE__*/React.createElement("path", { d: "M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z" - }))), /*#__PURE__*/_react.default.createElement("div", { + }))), /*#__PURE__*/React.createElement("div", { "data-gatsby-loading-indicator": "text" }, visible ? `Preparing requested page` : ``))); } \ No newline at end of file diff --git a/.cache/commonjs/loading-indicator/portal.js b/.cache/commonjs/loading-indicator/portal.js deleted file mode 100644 index ec543e6..0000000 --- a/.cache/commonjs/loading-indicator/portal.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; - -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - -exports.__esModule = true; -exports.default = void 0; - -var React = _interopRequireWildcard(require("react")); - -var _reactDom = require("react-dom"); - -// this is `fast-refresh-overlay/portal` ported to class component -// because we don't have guarantee that query on demand users will use -// react version that supports hooks -// TO-DO: consolidate both portals into single shared component (need testing) -class ShadowPortal extends React.Component { - constructor(...args) { - super(...args); - this.mountNode = /*#__PURE__*/React.createRef(null); - this.portalNode = /*#__PURE__*/React.createRef(null); - this.shadowNode = /*#__PURE__*/React.createRef(null); - this.state = { - createdElement: false - }; - } - - componentDidMount() { - const ownerDocument = this.mountNode.current.ownerDocument; - this.portalNode.current = ownerDocument.createElement(`gatsby-portal`); - this.shadowNode.current = this.portalNode.current.attachShadow({ - mode: `open` - }); - ownerDocument.body.appendChild(this.portalNode.current); - this.setState({ - createdElement: true - }); - } - - componentWillUnmount() { - if (this.portalNode.current && this.portalNode.current.ownerDocument) { - this.portalNode.current.ownerDocument.body.removeChild(this.portalNode.current); - } - } - - render() { - return this.shadowNode.current ? /*#__PURE__*/(0, _reactDom.createPortal)(this.props.children, this.shadowNode.current) : /*#__PURE__*/React.createElement("span", { - ref: this.mountNode - }); - } - -} - -var _default = ShadowPortal; -exports.default = _default; \ No newline at end of file diff --git a/.cache/commonjs/loading-indicator/style.js b/.cache/commonjs/loading-indicator/style.js index 39cd83d..5842f75 100644 --- a/.cache/commonjs/loading-indicator/style.js +++ b/.cache/commonjs/loading-indicator/style.js @@ -3,30 +3,22 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; -exports.default = void 0; +exports.Style = void 0; var _react = _interopRequireDefault(require("react")); -function css(strings, ...keys) { - const lastIndex = strings.length - 1; - return strings.slice(0, lastIndex).reduce((p, s, i) => p + s + keys[i], ``) + strings[lastIndex]; -} +var _cssToObject = require("../css-to-object"); const Style = () => /*#__PURE__*/_react.default.createElement("style", { dangerouslySetInnerHTML: { - __html: css` + __html: (0, _cssToObject.css)` :host { - --purple-60: #663399; - --gatsby: var(--purple-60); - --purple-40: #b17acc; - --purple-20: #f1defa; - --dimmedWhite: rgba(255, 255, 255, 0.8); - --white: #ffffff; - --black: #000000; - --grey-90: #232129; + --spinnerColor: #663399; + --borderLeft: #b17acc; + --background: #ffffff; + --color: #232129; --radii: 4px; - --z-index-normal: 5; - --z-index-elevated: 10; + --z-index-indicator: 10000; --shadow: 0px 2px 4px rgba(46, 41, 51, 0.08), 0px 4px 8px rgba(71, 63, 79, 0.16); } @@ -35,15 +27,15 @@ const Style = () => /*#__PURE__*/_react.default.createElement("style", { font: 14px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important; - background: var(--white); - color: var(--grey-90); + background: var(--background); + color: var(--color); position: fixed; bottom: 1.5em; left: 1.5em; box-shadow: var(--shadow); border-radius: var(--radii); - z-index: var(--z-index-elevated); - border-left: 0.25em solid var(--purple-40); + z-index: var(--z-index-indicator); + border-left: 0.25em solid var(--borderLeft); display: flex; align-items: center; justify-content: space-between; @@ -71,7 +63,7 @@ const Style = () => /*#__PURE__*/_react.default.createElement("style", { animation: spin 1s linear infinite; height: 18px; width: 18px; - color: var(--gatsby); + color: var(--spinnerColor); } [data-gatsby-loading-indicator="text"] { @@ -102,17 +94,14 @@ const Style = () => /*#__PURE__*/_react.default.createElement("style", { } @media (prefers-color-scheme: dark) { - [data-gatsby-loading-indicator="root"] { - background: var(--grey-90); - color: var(--white); - } - [data-gatsby-loading-indicator="spinner"] { - color: var(--purple-20); + :host { + --spinnerColor: #f1defa; + --background: #232129; + --color: #ffffff; } } ` } }); -var _default = Style; -exports.default = _default; \ No newline at end of file +exports.Style = Style; \ No newline at end of file diff --git a/.cache/commonjs/navigation.js b/.cache/commonjs/navigation.js index 94c7348..fa180b6 100644 --- a/.cache/commonjs/navigation.js +++ b/.cache/commonjs/navigation.js @@ -1,7 +1,5 @@ "use strict"; -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; @@ -17,7 +15,9 @@ var _propTypes = _interopRequireDefault(require("prop-types")); var _loader = _interopRequireWildcard(require("./loader")); -var _redirects = _interopRequireDefault(require("./redirects.json")); +var _redirectUtils = require("./redirect-utils.js"); + +exports.maybeGetBrowserRedirect = _redirectUtils.maybeGetBrowserRedirect; var _apiRunnerBrowser = require("./api-runner-browser"); @@ -25,48 +25,45 @@ var _emitter = _interopRequireDefault(require("./emitter")); var _routeAnnouncerProps = require("./route-announcer-props"); -var _router = require("@reach/router"); +var _reachRouter = require("@gatsbyjs/reach-router"); -var _history = require("@reach/router/lib/history"); +var _history = require("@gatsbyjs/reach-router/lib/history"); var _gatsbyLink = require("gatsby-link"); -// Convert to a map for faster lookup in maybeRedirect() -const redirectMap = new Map(); -const redirectIgnoreCaseMap = new Map(); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } -_redirects.default.forEach(redirect => { - if (redirect.ignoreCase) { - redirectIgnoreCaseMap.set(redirect.fromPath, redirect); - } else { - redirectMap.set(redirect.fromPath, redirect); - } -}); +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function maybeRedirect(pathname) { - let redirect = redirectMap.get(pathname); - - if (!redirect) { - redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase()); - } + const redirect = (0, _redirectUtils.maybeGetBrowserRedirect)(pathname); + const { + hash, + search + } = window.location; if (redirect != null) { - if (process.env.NODE_ENV !== `production`) { - if (!_loader.default.isPageNotFound(pathname)) { - console.error(`The route "${pathname}" matches both a page and a redirect; this is probably not intentional.`); - } - } - - window.___replace(redirect.toPath); + window.___replace(redirect.toPath + search + hash); return true; } else { return false; } -} +} // Catch unhandled chunk loading errors and force a restart of the app. + + +let nextRoute = ``; +window.addEventListener(`unhandledrejection`, event => { + if (/loading chunk \d* failed./i.test(event.reason)) { + if (nextRoute) { + window.location.pathname = nextRoute; + } + } +}); const onPreRouteUpdate = (location, prevLocation) => { if (!maybeRedirect(location.pathname)) { + nextRoute = location.pathname; (0, _apiRunnerBrowser.apiRunner)(`onPreRouteUpdate`, { location, prevLocation @@ -100,26 +97,22 @@ const navigate = (to, options = {}) => { return; } - let { - pathname + const { + pathname, + search, + hash } = (0, _gatsbyLink.parsePath)(to); - let redirect = redirectMap.get(pathname); - - if (!redirect) { - redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase()); - } // If we're redirecting, just replace the passed in pathname + const redirect = (0, _redirectUtils.maybeGetBrowserRedirect)(pathname); // If we're redirecting, just replace the passed in pathname // to the one we want to redirect to. - if (redirect) { - to = redirect.toPath; - pathname = (0, _gatsbyLink.parsePath)(to).pathname; + to = redirect.toPath + search + hash; } // If we had a service worker update, no matter the path, reload window and // reset the pathname whitelist if (window.___swUpdated) { - window.location = pathname; + window.location = pathname + search + hash; return; } // Start a timer to wait for a second before transitioning and showing a // loader in case resources aren't around yet. @@ -152,6 +145,10 @@ const navigate = (to, options = {}) => { if (process.env.NODE_ENV === `production` && pageResources) { + // window.___webpackCompilationHash gets set in production-app.js after navigationInit() is called + // So on a direct visit of a page with a browser redirect this check is truthy and thus the codepath is hit + // While the resource actually exists, but only too late + // TODO: This should probably be fixed by setting ___webpackCompilationHash before navigationInit() is called if (pageResources.page.webpackCompilationHash !== window.___webpackCompilationHash) { // Purge plugin-offline cache if (`serviceWorker` in navigator && navigator.serviceWorker.controller !== null && navigator.serviceWorker.controller.state === `activated`) { @@ -160,11 +157,11 @@ const navigate = (to, options = {}) => { }); } - window.location = pathname; + window.location = pathname + search + hash; } } - (0, _router.navigate)(to, options); + (0, _reachRouter.navigate)(to, options); clearTimeout(timeoutId); }); }; @@ -183,7 +180,9 @@ function shouldUpdateScroll(prevRouterProps, { routerProps: { location }, - getSavedScrollPosition: args => [0, this._stateStorage.read(args, args.key)] + getSavedScrollPosition: args => [0, // FIXME this is actually a big code smell, we should fix this + // eslint-disable-next-line @babel/no-invalid-this + this._stateStorage.read(args, args.key)] }); if (results.length > 0) { diff --git a/.cache/commonjs/page-renderer.js b/.cache/commonjs/page-renderer.js index b3ee3ce..06d77bd 100644 --- a/.cache/commonjs/page-renderer.js +++ b/.cache/commonjs/page-renderer.js @@ -2,8 +2,6 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - exports.__esModule = true; exports.default = void 0; @@ -11,26 +9,23 @@ var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); -var _loader = require("./loader"); - var _apiRunnerBrowser = require("./api-runner-browser"); var _findPath = require("./find-path"); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + // Renders page class PageRenderer extends _react.default.Component { render() { const props = { ...this.props, params: { ...(0, _findPath.grabMatchParams)(this.props.location.pathname), ...this.props.pageResources.json.pageContext.__params - }, - pathContext: this.props.pageContext + } }; - const [replacementElement] = (0, _apiRunnerBrowser.apiRunner)(`replaceComponentRenderer`, { - props: this.props, - loader: _loader.publicLoader - }); - const pageElement = replacementElement || /*#__PURE__*/(0, _react.createElement)(this.props.pageResources.component, { ...props, + const pageElement = /*#__PURE__*/(0, _react.createElement)(this.props.pageResources.component, { ...props, key: this.props.path || this.props.pageResources.page.path }); const wrappedPage = (0, _apiRunnerBrowser.apiRunner)(`wrapPageElement`, { diff --git a/.cache/commonjs/production-app.js b/.cache/commonjs/production-app.js index bff738a..307b063 100644 --- a/.cache/commonjs/production-app.js +++ b/.cache/commonjs/production-app.js @@ -10,12 +10,10 @@ var _react = _interopRequireDefault(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); -var _router = require("@reach/router"); +var _reachRouter = require("@gatsbyjs/reach-router"); var _gatsbyReactRouterScroll = require("gatsby-react-router-scroll"); -var _domready = _interopRequireDefault(require("@mikaelkristiansson/domready")); - var _gatsby = require("gatsby"); var _navigation = require("./navigation"); @@ -35,7 +33,7 @@ var _stripPrefix = _interopRequireDefault(require("./strip-prefix")); var _matchPaths = _interopRequireDefault(require("$virtual/match-paths.json")); // Generated during bootstrap -const loader = new _loader.ProdLoader(_asyncRequires.default, _matchPaths.default); +const loader = new _loader.ProdLoader(_asyncRequires.default, _matchPaths.default, window.pageData); (0, _loader.setLoader)(loader); loader.setApiRunner(_apiRunnerBrowser.apiRunner); window.asyncRequires = _asyncRequires.default; @@ -45,7 +43,7 @@ window.___loader = _loader.publicLoader; (0, _apiRunnerBrowser.apiRunnerAsync)(`onClientEntry`).then(() => { // Let plugins register a service worker. The plugin just needs // to return true. - if ((0, _apiRunnerBrowser.apiRunner)(`registerServiceWorker`).length > 0) { + if ((0, _apiRunnerBrowser.apiRunner)(`registerServiceWorker`).filter(Boolean).length > 0) { require(`./register-service-worker`); } // In gatsby v2 if Router is used in page using matchPaths // paths need to contain full path. @@ -57,7 +55,7 @@ window.___loader = _loader.publicLoader; // Remove this in v3 - const RouteHandler = props => /*#__PURE__*/_react.default.createElement(_router.BaseContext.Provider, { + const RouteHandler = props => /*#__PURE__*/_react.default.createElement(_reachRouter.BaseContext.Provider, { value: { baseuri: `/`, basepath: `/` @@ -71,7 +69,7 @@ window.___loader = _loader.publicLoader; const { children } = this.props; - return /*#__PURE__*/_react.default.createElement(_router.Location, null, ({ + return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, ({ location }) => /*#__PURE__*/_react.default.createElement(_ensureResources.default, { location: location @@ -103,7 +101,7 @@ window.___loader = _loader.publicLoader; }, /*#__PURE__*/_react.default.createElement(_gatsbyReactRouterScroll.ScrollContext, { location: location, shouldUpdateScroll: _navigation.shouldUpdateScroll - }, /*#__PURE__*/_react.default.createElement(_router.Router, { + }, /*#__PURE__*/_react.default.createElement(_reachRouter.Router, { basepath: __BASE_PATH__, location: location, id: "gatsby-focus-wrapper" @@ -129,14 +127,22 @@ window.___loader = _loader.publicLoader; // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/) if (pagePath && __BASE_PATH__ + pagePath !== browserLoc.pathname && !(loader.findMatchPath((0, _stripPrefix.default)(browserLoc.pathname, __BASE_PATH__)) || pagePath === `/404.html` || pagePath.match(/^\/404\/?$/) || pagePath.match(/^\/offline-plugin-app-shell-fallback\/?$/))) { - (0, _router.navigate)(__BASE_PATH__ + pagePath + browserLoc.search + browserLoc.hash, { + (0, _reachRouter.navigate)(__BASE_PATH__ + pagePath + browserLoc.search + browserLoc.hash, { replace: true }); } _loader.publicLoader.loadPage(browserLoc.pathname).then(page => { if (!page || page.status === _loader.PageResourceStatus.Error) { - throw new Error(`page resources for ${browserLoc.pathname} not found. Not rendering React`); + const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`; // if the chunk throws an error we want to capture the real error + // This should help with https://github.com/gatsbyjs/gatsby/issues/19618 + + if (page && page.error) { + console.error(message); + throw page.error; + } + + throw new Error(message); } window.___webpackCompilationHash = page.page.webpackCompilationHash; @@ -150,13 +156,53 @@ window.___loader = _loader.publicLoader; }; }).pop(); - const App = () => /*#__PURE__*/_react.default.createElement(GatsbyRoot, null, SiteRoot); + const App = function App() { + const onClientEntryRanRef = _react.default.useRef(false); - const renderer = (0, _apiRunnerBrowser.apiRunner)(`replaceHydrateFunction`, undefined, _reactDom.default.hydrate)[0]; - (0, _domready.default)(() => { - renderer( /*#__PURE__*/_react.default.createElement(App, null), typeof window !== `undefined` ? document.getElementById(`___gatsby`) : void 0, () => { - (0, _apiRunnerBrowser.apiRunner)(`onInitialClientRender`); - }); - }); + _react.default.useEffect(() => { + if (!onClientEntryRanRef.current) { + onClientEntryRanRef.current = true; + + if (performance.mark) { + performance.mark(`onInitialClientRender`); + } + + (0, _apiRunnerBrowser.apiRunner)(`onInitialClientRender`); + } + }, []); + + return /*#__PURE__*/_react.default.createElement(GatsbyRoot, null, SiteRoot); + }; + + const renderer = (0, _apiRunnerBrowser.apiRunner)(`replaceHydrateFunction`, undefined, _reactDom.default.hydrateRoot ? _reactDom.default.hydrateRoot : _reactDom.default.hydrate)[0]; + + function runRender() { + const rootElement = typeof window !== `undefined` ? document.getElementById(`___gatsby`) : null; + + if (renderer === _reactDom.default.hydrateRoot) { + renderer(rootElement, /*#__PURE__*/_react.default.createElement(App, null)); + } else { + renderer( /*#__PURE__*/_react.default.createElement(App, null), rootElement); + } + } // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450 + // TODO remove IE 10 support + + + const doc = document; + + if (doc.readyState === `complete` || doc.readyState !== `loading` && !doc.documentElement.doScroll) { + setTimeout(function () { + runRender(); + }, 0); + } else { + const handler = function () { + doc.removeEventListener(`DOMContentLoaded`, handler, false); + window.removeEventListener(`load`, handler, false); + runRender(); + }; + + doc.addEventListener(`DOMContentLoaded`, handler, false); + window.addEventListener(`load`, handler, false); + } }); }); \ No newline at end of file diff --git a/.cache/commonjs/query-result-store.js b/.cache/commonjs/query-result-store.js index 30a7dbd..0ff8f58 100644 --- a/.cache/commonjs/query-result-store.js +++ b/.cache/commonjs/query-result-store.js @@ -1,7 +1,5 @@ "use strict"; -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; @@ -21,6 +19,10 @@ var _normalizePagePath = _interopRequireDefault(require("./normalize-page-path") var _loader = _interopRequireWildcard(require("./loader")); +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + if (process.env.NODE_ENV === `production`) { throw new Error(`It appears like Gatsby is misconfigured. JSONStore is Gatsby internal ` + `development-only component and should never be used in production.\n\n` + `Unless your site has a complex or custom webpack/Gatsby ` + `configuration this is likely a bug in Gatsby. ` + `Please report this at https://github.com/gatsbyjs/gatsby/issues ` + `with steps to reproduce this error.`); } diff --git a/.cache/commonjs/root.js b/.cache/commonjs/root.js index 4e72618..1453f27 100644 --- a/.cache/commonjs/root.js +++ b/.cache/commonjs/root.js @@ -9,7 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends") var _react = _interopRequireDefault(require("react")); -var _router = require("@reach/router"); +var _reachRouter = require("@gatsbyjs/reach-router"); var _gatsbyReactRouterScroll = require("gatsby-react-router-scroll"); @@ -25,33 +25,7 @@ var _ensureResources = _interopRequireDefault(require("./ensure-resources")); var _fastRefreshOverlay = _interopRequireDefault(require("./fast-refresh-overlay")); -var _errorOverlayHandler = require("./error-overlay-handler"); - -var _loadingIndicator = require("./loading-indicator"); - -// TODO: Remove entire block when we make fast-refresh the default -// In fast-refresh, this logic is all moved into the `error-overlay-handler` -if (window.__webpack_hot_middleware_reporter__ !== undefined && process.env.GATSBY_HOT_LOADER !== `fast-refresh`) { - const overlayErrorID = `webpack`; // Report build errors - - window.__webpack_hot_middleware_reporter__.useCustomOverlay({ - showProblems(type, obj) { - if (type !== `errors`) { - (0, _errorOverlayHandler.clearError)(overlayErrorID); - return; - } - - (0, _errorOverlayHandler.reportError)(overlayErrorID, obj[0]); - }, - - clear() { - (0, _errorOverlayHandler.clearError)(overlayErrorID); - } - - }); -} - -(0, _navigation.init)(); // In gatsby v2 if Router is used in page using matchPaths +// In gatsby v2 if Router is used in page using matchPaths // paths need to contain full path. // For example: // - page have `/app/*` matchPath @@ -59,8 +33,7 @@ if (window.__webpack_hot_middleware_reporter__ !== undefined && process.env.GATS // Resetting `basepath`/`baseuri` keeps current behaviour // to not introduce breaking change. // Remove this in v3 - -const RouteHandler = props => /*#__PURE__*/_react.default.createElement(_router.BaseContext.Provider, { +const RouteHandler = props => /*#__PURE__*/_react.default.createElement(_reachRouter.BaseContext.Provider, { value: { baseuri: `/`, basepath: `/` @@ -81,7 +54,7 @@ class LocationHandler extends _react.default.Component { }, /*#__PURE__*/_react.default.createElement(_gatsbyReactRouterScroll.ScrollContext, { location: location, shouldUpdateScroll: _navigation.shouldUpdateScroll - }, /*#__PURE__*/_react.default.createElement(_router.Router, { + }, /*#__PURE__*/_react.default.createElement(_reachRouter.Router, { basepath: __BASE_PATH__, location: location, id: "gatsby-focus-wrapper" @@ -104,7 +77,7 @@ class LocationHandler extends _react.default.Component { return /*#__PURE__*/_react.default.createElement(_navigation.RouteUpdates, { location: location - }, /*#__PURE__*/_react.default.createElement(_router.Router, { + }, /*#__PURE__*/_react.default.createElement(_reachRouter.Router, { basepath: __BASE_PATH__, location: location, id: "gatsby-focus-wrapper" @@ -118,10 +91,10 @@ class LocationHandler extends _react.default.Component { } -const Root = () => /*#__PURE__*/_react.default.createElement(_router.Location, null, locationContext => /*#__PURE__*/_react.default.createElement(LocationHandler, locationContext)); // Let site, plugins wrap the site e.g. for Redux. +const Root = () => /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, locationContext => /*#__PURE__*/_react.default.createElement(LocationHandler, locationContext)); // Let site, plugins wrap the site e.g. for Redux. -const WrappedRoot = (0, _apiRunnerBrowser.apiRunner)(`wrapRootElement`, { +const rootWrappedWithWrapRootElement = (0, _apiRunnerBrowser.apiRunner)(`wrapRootElement`, { element: /*#__PURE__*/_react.default.createElement(Root, null) }, /*#__PURE__*/_react.default.createElement(Root, null), ({ result, @@ -132,16 +105,9 @@ const WrappedRoot = (0, _apiRunnerBrowser.apiRunner)(`wrapRootElement`, { }; }).pop(); -const ConditionalFastRefreshOverlay = ({ - children -}) => { - if (process.env.GATSBY_HOT_LOADER === `fast-refresh`) { - return /*#__PURE__*/_react.default.createElement(_fastRefreshOverlay.default, null, children); - } - - return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children); -}; - -var _default = () => /*#__PURE__*/_react.default.createElement(ConditionalFastRefreshOverlay, null, /*#__PURE__*/_react.default.createElement(_queryResultStore.StaticQueryStore, null, WrappedRoot)); +function RootWrappedWithOverlayAndProvider() { + return /*#__PURE__*/_react.default.createElement(_fastRefreshOverlay.default, null, /*#__PURE__*/_react.default.createElement(_queryResultStore.StaticQueryStore, null, rootWrappedWithWrapRootElement)); +} +var _default = RootWrappedWithOverlayAndProvider; exports.default = _default; \ No newline at end of file diff --git a/.cache/commonjs/ssr-develop-static-entry.js b/.cache/commonjs/ssr-develop-static-entry.js index 1642716..4de1e76 100644 --- a/.cache/commonjs/ssr-develop-static-entry.js +++ b/.cache/commonjs/ssr-develop-static-entry.js @@ -3,7 +3,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; -exports.default = void 0; +exports.default = staticPage; var _react = _interopRequireDefault(require("react")); @@ -13,9 +13,9 @@ var _server = require("react-dom/server"); var _lodash = require("lodash"); -var _path = require("path"); +var _path = _interopRequireDefault(require("path")); -var _apiRunnerSsr = _interopRequireDefault(require("./api-runner-ssr")); +var _apiRunnerSsr = require("./api-runner-ssr"); var _findPath = require("./find-path"); @@ -25,6 +25,7 @@ var _routeAnnouncerProps = require("./route-announcer-props"); var _router = require("@reach/router"); +/* global BROWSER_ESM_ONLY */ // import testRequireError from "./test-require-error" // For some extremely mysterious reason, webpack adds the above module *after* // this module so that when this code runs, testRequireError is undefined. @@ -35,7 +36,17 @@ const testRequireError = (moduleName, err) => { return regex.test(firstLine); }; -const stats = JSON.parse(_fs.default.readFileSync(`${process.cwd()}/public/webpack.stats.json`, `utf-8`)); +let cachedStats; + +const getStats = publicDir => { + if (cachedStats) { + return cachedStats; + } else { + cachedStats = JSON.parse(_fs.default.readFileSync(_path.default.join(publicDir, `webpack.stats.json`), `utf-8`)); + return cachedStats; + } +}; + let Html; try { @@ -51,7 +62,7 @@ try { Html = Html && Html.__esModule ? Html.default : Html; -var _default = (pagePath, isClientOnlyPage, callback) => { +async function staticPage(pagePath, isClientOnlyPage, publicDir, error, callback) { let bodyHtml = ``; let headComponents = [/*#__PURE__*/_react.default.createElement("meta", { key: "environment", @@ -64,7 +75,18 @@ var _default = (pagePath, isClientOnlyPage, callback) => { let postBodyComponents = []; let bodyProps = {}; - const generateBodyHTML = () => { + if (error) { + postBodyComponents.push([/*#__PURE__*/_react.default.createElement("script", { + key: "dev-ssr-error", + dangerouslySetInnerHTML: { + __html: `window._gatsbyEvents = window._gatsbyEvents || []; window._gatsbyEvents.push(["FAST_REFRESH", { action: "SHOW_DEV_SSR_ERROR", payload: ${JSON.stringify(error)} }])` + } + }), /*#__PURE__*/_react.default.createElement("noscript", { + key: "dev-ssr-error-noscript" + }, /*#__PURE__*/_react.default.createElement("h1", null, "Failed to Server Render (SSR)"), /*#__PURE__*/_react.default.createElement("h2", null, "Error message:"), /*#__PURE__*/_react.default.createElement("p", null, error.sourceMessage), /*#__PURE__*/_react.default.createElement("h2", null, "File:"), /*#__PURE__*/_react.default.createElement("p", null, error.source, ":", error.line, ":", error.column), /*#__PURE__*/_react.default.createElement("h2", null, "Stack:"), /*#__PURE__*/_react.default.createElement("pre", null, /*#__PURE__*/_react.default.createElement("code", null, error.stack)))]); + } + + const generateBodyHTML = async () => { const setHeadComponents = components => { headComponents = headComponents.concat(components); }; @@ -113,12 +135,13 @@ var _default = (pagePath, isClientOnlyPage, callback) => { const getPageDataPath = path => { const fixedPagePath = path === `/` ? `index` : path; - return (0, _path.join)(`page-data`, fixedPagePath, `page-data.json`); + return _path.default.join(`page-data`, fixedPagePath, `page-data.json`); }; const getPageData = pagePath => { const pageDataPath = getPageDataPath(pagePath); - const absolutePageDataPath = (0, _path.join)(process.cwd(), `public`, pageDataPath); + + const absolutePageDataPath = _path.default.join(publicDir, pageDataPath); const pageDataJson = _fs.default.readFileSync(absolutePageDataPath, `utf8`); @@ -131,11 +154,11 @@ var _default = (pagePath, isClientOnlyPage, callback) => { const pageData = getPageData(pagePath); const { - componentChunkName, - staticQueryHashes = [] + componentChunkName } = pageData; let scriptsAndStyles = (0, _lodash.flatten)([`commons`].map(chunkKey => { const fetchKey = `assetsByChunkName[${chunkKey}]`; + const stats = getStats(publicDir); let chunks = (0, _lodash.get)(stats, fetchKey); const namedChunkGroups = (0, _lodash.get)(stats, `namedChunkGroups`); @@ -155,21 +178,23 @@ var _default = (pagePath, isClientOnlyPage, callback) => { }); namedChunkGroups[chunkKey].assets.forEach(asset => chunks.push({ rel: `preload`, - name: asset + name: asset.name })); const childAssets = namedChunkGroups[chunkKey].childAssets; for (const rel in childAssets) { - chunks = (0, _lodash.concat)(chunks, childAssets[rel].map(chunk => { - return { - rel, - name: chunk - }; - })); + if (childAssets.hasownProperty(rel)) { + chunks = (0, _lodash.concat)(chunks, childAssets[rel].map(chunk => { + return { + rel, + name: chunk + }; + })); + } } return chunks; - })).filter(s => (0, _lodash.isObject)(s)).sort((s1, s2) => s1.rel == `preload` ? -1 : 1); // given priority to preload + })).filter(s => (0, _lodash.isObject)(s)).sort((s1, _s2) => s1.rel == `preload` ? -1 : 1); // given priority to preload scriptsAndStyles = (0, _lodash.uniqBy)(scriptsAndStyles, item => item.name); const styles = scriptsAndStyles.filter(style => style.name && style.name.endsWith(`.css`)); @@ -192,9 +217,7 @@ var _default = (pagePath, isClientOnlyPage, callback) => { ...pageData.result, params: { ...(0, _findPath.grabMatchParams)(this.props.location.pathname), ...(((_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) || {}) - }, - // pathContext was deprecated in v2. Renamed to pageContext - pathContext: pageData.result ? pageData.result.pageContext : undefined + } }; let pageElement; @@ -206,7 +229,7 @@ var _default = (pagePath, isClientOnlyPage, callback) => { pageElement = () => null; } - const wrappedPage = (0, _apiRunnerSsr.default)(`wrapPageElement`, { + const wrappedPage = (0, _apiRunnerSsr.apiRunner)(`wrapPageElement`, { element: pageElement, props }, pageElement, ({ @@ -231,7 +254,7 @@ var _default = (pagePath, isClientOnlyPage, callback) => { path: "/*" })), /*#__PURE__*/_react.default.createElement("div", _routeAnnouncerProps.RouteAnnouncerProps)); - const bodyComponent = (0, _apiRunnerSsr.default)(`wrapRootElement`, { + const bodyComponent = (0, _apiRunnerSsr.apiRunner)(`wrapRootElement`, { element: routerElement, pathname: pagePath }, routerElement, ({ @@ -243,7 +266,7 @@ var _default = (pagePath, isClientOnlyPage, callback) => { }; }).pop(); // Let the site or plugin render the page component. - (0, _apiRunnerSsr.default)(`replaceRenderer`, { + await (0, _apiRunnerSsr.apiRunnerAsync)(`replaceRenderer`, { bodyComponent, replaceBodyHTMLString, setHeadComponents, @@ -265,7 +288,7 @@ var _default = (pagePath, isClientOnlyPage, callback) => { } } - (0, _apiRunnerSsr.default)(`onRenderBody`, { + (0, _apiRunnerSsr.apiRunner)(`onRenderBody`, { setHeadComponents, setHtmlAttributes, setBodyAttributes, @@ -274,7 +297,7 @@ var _default = (pagePath, isClientOnlyPage, callback) => { setBodyProps, pathname: pagePath }); - (0, _apiRunnerSsr.default)(`onPreRenderHTML`, { + (0, _apiRunnerSsr.apiRunner)(`onPreRenderHTML`, { getHeadComponents, replaceHeadComponents, getPreBodyComponents, @@ -286,7 +309,7 @@ var _default = (pagePath, isClientOnlyPage, callback) => { return bodyHtml; }; - const bodyStr = generateBodyHTML(); + const bodyStr = await generateBodyHTML(); const htmlElement = /*#__PURE__*/_react.default.createElement(Html, { ...bodyProps, body: bodyStr, @@ -297,19 +320,20 @@ var _default = (pagePath, isClientOnlyPage, callback) => { htmlAttributes, bodyAttributes, preBodyComponents, - postBodyComponents: postBodyComponents.concat([/*#__PURE__*/_react.default.createElement("script", { + postBodyComponents: postBodyComponents.concat([!BROWSER_ESM_ONLY && /*#__PURE__*/_react.default.createElement("script", { key: `polyfill`, src: "/polyfill.js", noModule: true + }), /*#__PURE__*/_react.default.createElement("script", { + key: `framework`, + src: "/framework.js" }), /*#__PURE__*/_react.default.createElement("script", { key: `commons`, src: "/commons.js" - })]) + })].filter(Boolean)) }); let htmlStr = (0, _server.renderToStaticMarkup)(htmlElement); htmlStr = `${htmlStr}`; callback(null, htmlStr); -}; - -exports.default = _default; \ No newline at end of file +} \ No newline at end of file diff --git a/.cache/commonjs/static-entry.js b/.cache/commonjs/static-entry.js index 19608ec..aa62f9b 100644 --- a/.cache/commonjs/static-entry.js +++ b/.cache/commonjs/static-entry.js @@ -3,46 +3,47 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; -exports.default = exports.sanitizeComponents = void 0; +exports.default = staticPage; +exports.sanitizeComponents = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); const React = require(`react`); -const fs = require(`fs`); - -const { - join -} = require(`path`); +const path = require(`path`); const { renderToString, - renderToStaticMarkup + renderToStaticMarkup, + pipeToNodeWritable } = require(`react-dom/server`); const { ServerLocation, Router, isRedirect -} = require(`@reach/router`); +} = require(`@gatsbyjs/reach-router`); + +const merge = require(`deepmerge`); + +const { + StaticQueryContext +} = require(`gatsby`); + +const fs = require(`fs`); const { - get, - merge, - isObject, - flatten, - uniqBy, - flattenDeep, - replace, - concat, - memoize -} = require(`lodash`); + WritableAsPromise +} = require(`./server-utils/writable-as-promise`); const { RouteAnnouncerProps } = require(`./route-announcer-props`); -const apiRunner = require(`./api-runner-ssr`); +const { + apiRunner, + apiRunnerAsync +} = require(`./api-runner-ssr`); const syncRequires = require(`$virtual/sync-requires`); @@ -54,8 +55,12 @@ const { grabMatchParams } = require(`./find-path`); -const stats = JSON.parse(fs.readFileSync(`${process.cwd()}/public/webpack.stats.json`, `utf-8`)); -const chunkMapping = JSON.parse(fs.readFileSync(`${process.cwd()}/public/chunk-map.json`, `utf-8`)); // const testRequireError = require("./test-require-error") +const chunkMapping = require(`../public/chunk-map.json`); // we want to force posix-style joins, so Windows doesn't produce backslashes for urls + + +const { + join +} = path.posix; // const testRequireError = require("./test-require-error") // For some extremely mysterious reason, webpack adds the above module *after* // this module so that when this code runs, testRequireError is undefined. // So in the meantime, we'll just inline it. @@ -90,62 +95,22 @@ const getPageDataUrl = pagePath => { return `${__PATH_PREFIX__}/${pageDataPath}`; }; -const getStaticQueryUrl = hash => `${__PATH_PREFIX__}/page-data/sq/d/${hash}.json`; - -const getPageData = pagePath => { - const pageDataPath = getPageDataPath(pagePath); - const absolutePageDataPath = join(process.cwd(), `public`, pageDataPath); - const pageDataRaw = fs.readFileSync(absolutePageDataPath); - - try { - return JSON.parse(pageDataRaw.toString()); - } catch (err) { - return null; - } -}; - -const appDataPath = join(`page-data`, `app-data.json`); -const getAppDataUrl = memoize(() => { - let appData; - - try { - const absoluteAppDataPath = join(process.cwd(), `public`, appDataPath); - const appDataRaw = fs.readFileSync(absoluteAppDataPath); - appData = JSON.parse(appDataRaw.toString()); - - if (!appData) { - return null; - } - } catch (err) { - return null; - } +const getStaticQueryPath = hash => join(`page-data`, `sq`, `d`, `${hash}.json`); - return `${__PATH_PREFIX__}/${appDataPath}`; -}); - -const loadPageDataSync = pagePath => { - const pageDataPath = getPageDataPath(pagePath); - const pageDataFile = join(process.cwd(), `public`, pageDataPath); +const getStaticQueryUrl = hash => `${__PATH_PREFIX__}/${getStaticQueryPath(hash)}`; - try { - const pageDataJson = fs.readFileSync(pageDataFile); - return JSON.parse(pageDataJson); - } catch (error) { - // not an error if file is not found. There's just no page data - return null; - } -}; +const getAppDataUrl = () => `${__PATH_PREFIX__}/${join(`page-data`, `app-data.json`)}`; const createElement = React.createElement; const sanitizeComponents = components => { - const componentsArray = ensureArray(components); + const componentsArray = [].concat(components).flat(Infinity).filter(Boolean); return componentsArray.map(component => { // Ensure manifest is always loaded from content server // And not asset server when an assetPrefix is used if (__ASSET_PREFIX__ && component.props.rel === `manifest`) { return React.cloneElement(component, { - href: replace(component.props.href, __ASSET_PREFIX__, ``) + href: component.props.href.replace(__ASSET_PREFIX__, ``) }); } @@ -155,330 +120,359 @@ const sanitizeComponents = components => { exports.sanitizeComponents = sanitizeComponents; -const ensureArray = components => { - if (Array.isArray(components)) { - // remove falsy items and flatten - return flattenDeep(components.filter(val => Array.isArray(val) ? val.length > 0 : val)); - } else { - // we also accept single components, so we need to handle this case as well - return components ? [components] : []; - } -}; - -var _default = (pagePath, callback) => { - let bodyHtml = ``; - let headComponents = [/*#__PURE__*/React.createElement("meta", { - name: "generator", - content: `Gatsby ${gatsbyVersion}`, - key: `generator-${gatsbyVersion}` - })]; - let htmlAttributes = {}; - let bodyAttributes = {}; - let preBodyComponents = []; - let postBodyComponents = []; - let bodyProps = {}; - - const replaceBodyHTMLString = body => { - bodyHtml = body; - }; - - const setHeadComponents = components => { - headComponents = headComponents.concat(sanitizeComponents(components)); +function deepMerge(a, b) { + const combineMerge = (target, source, options) => { + const destination = target.slice(); + source.forEach((item, index) => { + if (typeof destination[index] === `undefined`) { + destination[index] = options.cloneUnlessOtherwiseSpecified(item, options); + } else if (options.isMergeableObject(item)) { + destination[index] = merge(target[index], item, options); + } else if (target.indexOf(item) === -1) { + destination.push(item); + } + }); + return destination; }; - const setHtmlAttributes = attributes => { - htmlAttributes = merge(htmlAttributes, attributes); - }; + return merge(a, b, { + arrayMerge: combineMerge + }); +} - const setBodyAttributes = attributes => { - bodyAttributes = merge(bodyAttributes, attributes); - }; +async function staticPage({ + pagePath, + pageData, + staticQueryContext, + styles, + scripts, + reversedStyles, + reversedScripts, + inlinePageData = false +}) { + // for this to work we need this function to be sync or at least ensure there is single execution of it at a time + global.unsafeBuiltinUsage = []; - const setPreBodyComponents = components => { - preBodyComponents = preBodyComponents.concat(sanitizeComponents(components)); - }; + try { + let bodyHtml = ``; + let headComponents = [/*#__PURE__*/React.createElement("meta", { + name: "generator", + content: `Gatsby ${gatsbyVersion}`, + key: `generator-${gatsbyVersion}` + })]; + let htmlAttributes = {}; + let bodyAttributes = {}; + let preBodyComponents = []; + let postBodyComponents = []; + let bodyProps = {}; + + function loadPageDataSync(_pagePath) { + if (_pagePath === pagePath) { + // no need to use fs if we are asking for pageData of current page + return pageData; + } - const setPostBodyComponents = components => { - postBodyComponents = postBodyComponents.concat(sanitizeComponents(components)); - }; + const pageDataPath = getPageDataPath(_pagePath); + const pageDataFile = join(process.cwd(), `public`, pageDataPath); - const setBodyProps = props => { - bodyProps = merge({}, bodyProps, props); - }; + try { + // deprecation notice + const myErrorHolder = { + name: `Usage of loadPageDataSync for page other than currently generated page disables incremental html generation in future builds` + }; + Error.captureStackTrace(myErrorHolder, loadPageDataSync); + global.unsafeBuiltinUsage.push(myErrorHolder.stack); + const pageDataJson = fs.readFileSync(pageDataFile); + return JSON.parse(pageDataJson); + } catch (error) { + // not an error if file is not found. There's just no page data + return null; + } + } - const getHeadComponents = () => headComponents; + const replaceBodyHTMLString = body => { + bodyHtml = body; + }; - const replaceHeadComponents = components => { - headComponents = sanitizeComponents(components); - }; + const setHeadComponents = components => { + headComponents = headComponents.concat(sanitizeComponents(components)); + }; - const getPreBodyComponents = () => preBodyComponents; + const setHtmlAttributes = attributes => { + // TODO - we should remove deep merges + htmlAttributes = deepMerge(htmlAttributes, attributes); + }; - const replacePreBodyComponents = components => { - preBodyComponents = sanitizeComponents(components); - }; + const setBodyAttributes = attributes => { + // TODO - we should remove deep merges + bodyAttributes = deepMerge(bodyAttributes, attributes); + }; - const getPostBodyComponents = () => postBodyComponents; + const setPreBodyComponents = components => { + preBodyComponents = preBodyComponents.concat(sanitizeComponents(components)); + }; - const replacePostBodyComponents = components => { - postBodyComponents = sanitizeComponents(components); - }; + const setPostBodyComponents = components => { + postBodyComponents = postBodyComponents.concat(sanitizeComponents(components)); + }; - const pageData = getPageData(pagePath); - const pageDataUrl = getPageDataUrl(pagePath); - const appDataUrl = getAppDataUrl(); - const { - componentChunkName, - staticQueryHashes = [] - } = pageData; - const staticQueryUrls = staticQueryHashes.map(getStaticQueryUrl); - - class RouteHandler extends React.Component { - render() { - var _pageData$result, _pageData$result$page; - - const props = { ...this.props, - ...pageData.result, - params: { ...grabMatchParams(this.props.location.pathname), - ...(((_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) || {}) - }, - // pathContext was deprecated in v2. Renamed to pageContext - pathContext: pageData.result ? pageData.result.pageContext : undefined - }; - const pageElement = createElement(syncRequires.components[componentChunkName], props); - const wrappedPage = apiRunner(`wrapPageElement`, { - element: pageElement, - props - }, pageElement, ({ - result - }) => { - return { - element: result, - props - }; - }).pop(); - return wrappedPage; - } + const setBodyProps = props => { + // TODO - we should remove deep merges + bodyProps = deepMerge({}, bodyProps, props); + }; - } + const getHeadComponents = () => headComponents; - const routerElement = /*#__PURE__*/React.createElement(ServerLocation, { - url: `${__BASE_PATH__}${pagePath}` - }, /*#__PURE__*/React.createElement(Router, { - id: "gatsby-focus-wrapper", - baseuri: __BASE_PATH__ - }, /*#__PURE__*/React.createElement(RouteHandler, { - path: "/*" - })), /*#__PURE__*/React.createElement("div", RouteAnnouncerProps)); - const bodyComponent = apiRunner(`wrapRootElement`, { - element: routerElement, - pathname: pagePath - }, routerElement, ({ - result - }) => { - return { - element: result, - pathname: pagePath + const replaceHeadComponents = components => { + headComponents = sanitizeComponents(components); }; - }).pop(); // Let the site or plugin render the page component. - - apiRunner(`replaceRenderer`, { - bodyComponent, - replaceBodyHTMLString, - setHeadComponents, - setHtmlAttributes, - setBodyAttributes, - setPreBodyComponents, - setPostBodyComponents, - setBodyProps, - pathname: pagePath, - pathPrefix: __PATH_PREFIX__ - }); // If no one stepped up, we'll handle it. - - if (!bodyHtml) { - try { - bodyHtml = renderToString(bodyComponent); - } catch (e) { - // ignore @reach/router redirect errors - if (!isRedirect(e)) throw e; - } - } // Create paths to scripts + const getPreBodyComponents = () => preBodyComponents; + + const replacePreBodyComponents = components => { + preBodyComponents = sanitizeComponents(components); + }; - let scriptsAndStyles = flatten([`app`, componentChunkName].map(s => { - const fetchKey = `assetsByChunkName[${s}]`; - let chunks = get(stats, fetchKey); - const namedChunkGroups = get(stats, `namedChunkGroups`); + const getPostBodyComponents = () => postBodyComponents; - if (!chunks) { - return null; - } + const replacePostBodyComponents = components => { + postBodyComponents = sanitizeComponents(components); + }; - chunks = chunks.map(chunk => { - if (chunk === `/`) { - return null; + const pageDataUrl = getPageDataUrl(pagePath); + const { + componentChunkName, + staticQueryHashes = [] + } = pageData; + const staticQueryUrls = staticQueryHashes.map(getStaticQueryUrl); + + class RouteHandler extends React.Component { + render() { + var _pageData$result, _pageData$result$page; + + const props = { ...this.props, + ...pageData.result, + params: { ...grabMatchParams(this.props.location.pathname), + ...(((_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) || {}) + } + }; + const pageElement = createElement(syncRequires.components[componentChunkName], props); + const wrappedPage = apiRunner(`wrapPageElement`, { + element: pageElement, + props + }, pageElement, ({ + result + }) => { + return { + element: result, + props + }; + }).pop(); + return wrappedPage; } + } + + const routerElement = /*#__PURE__*/React.createElement(ServerLocation, { + url: `${__BASE_PATH__}${pagePath}` + }, /*#__PURE__*/React.createElement(Router, { + id: "gatsby-focus-wrapper", + baseuri: __BASE_PATH__ + }, /*#__PURE__*/React.createElement(RouteHandler, { + path: "/*" + })), /*#__PURE__*/React.createElement("div", RouteAnnouncerProps)); + const bodyComponent = /*#__PURE__*/React.createElement(StaticQueryContext.Provider, { + value: staticQueryContext + }, apiRunner(`wrapRootElement`, { + element: routerElement, + pathname: pagePath + }, routerElement, ({ + result + }) => { return { - rel: `preload`, - name: chunk + element: result, + pathname: pagePath }; + }).pop()); // Let the site or plugin render the page component. + + await apiRunnerAsync(`replaceRenderer`, { + bodyComponent, + replaceBodyHTMLString, + setHeadComponents, + setHtmlAttributes, + setBodyAttributes, + setPreBodyComponents, + setPostBodyComponents, + setBodyProps, + pathname: pagePath, + pathPrefix: __PATH_PREFIX__ + }); // If no one stepped up, we'll handle it. + + if (!bodyHtml) { + try { + // react 18 enabled + if (pipeToNodeWritable) { + const writableStream = new WritableAsPromise(); + const { + startWriting + } = pipeToNodeWritable(bodyComponent, writableStream, { + onCompleteAll() { + startWriting(); + }, + + onError() {} + + }); + bodyHtml = await writableStream; + } else { + bodyHtml = renderToString(bodyComponent); + } + } catch (e) { + // ignore @reach/router redirect errors + if (!isRedirect(e)) throw e; + } + } + + apiRunner(`onRenderBody`, { + setHeadComponents, + setHtmlAttributes, + setBodyAttributes, + setPreBodyComponents, + setPostBodyComponents, + setBodyProps, + pathname: pagePath, + loadPageDataSync, + bodyHtml, + scripts, + styles, + pathPrefix: __PATH_PREFIX__ + }); + reversedScripts.forEach(script => { + // Add preload/prefetch s for scripts. + headComponents.push( /*#__PURE__*/React.createElement("link", { + as: "script", + rel: script.rel, + key: script.name, + href: `${__PATH_PREFIX__}/${script.name}` + })); }); - namedChunkGroups[s].assets.forEach(asset => chunks.push({ - rel: `preload`, - name: asset - })); - const childAssets = namedChunkGroups[s].childAssets; - for (const rel in childAssets) { - chunks = concat(chunks, childAssets[rel].map(chunk => { - return { - rel, - name: chunk - }; + if (pageData && !inlinePageData) { + headComponents.push( /*#__PURE__*/React.createElement("link", { + as: "fetch", + rel: "preload", + key: pageDataUrl, + href: pageDataUrl, + crossOrigin: "anonymous" })); } - return chunks; - })).filter(s => isObject(s)).sort((s1, s2) => s1.rel == `preload` ? -1 : 1); // given priority to preload - - scriptsAndStyles = uniqBy(scriptsAndStyles, item => item.name); - const scripts = scriptsAndStyles.filter(script => script.name && script.name.endsWith(`.js`)); - const styles = scriptsAndStyles.filter(style => style.name && style.name.endsWith(`.css`)); - apiRunner(`onRenderBody`, { - setHeadComponents, - setHtmlAttributes, - setBodyAttributes, - setPreBodyComponents, - setPostBodyComponents, - setBodyProps, - pathname: pagePath, - loadPageDataSync, - bodyHtml, - scripts, - styles, - pathPrefix: __PATH_PREFIX__ - }); - scripts.slice(0).reverse().forEach(script => { - // Add preload/prefetch s for scripts. - headComponents.push( /*#__PURE__*/React.createElement("link", { - as: "script", - rel: script.rel, - key: script.name, - href: `${__PATH_PREFIX__}/${script.name}` - })); - }); - - if (pageData) { - headComponents.push( /*#__PURE__*/React.createElement("link", { + staticQueryUrls.forEach(staticQueryUrl => headComponents.push( /*#__PURE__*/React.createElement("link", { as: "fetch", rel: "preload", - key: pageDataUrl, - href: pageDataUrl, + key: staticQueryUrl, + href: staticQueryUrl, crossOrigin: "anonymous" - })); - } - - staticQueryUrls.forEach(staticQueryUrl => headComponents.push( /*#__PURE__*/React.createElement("link", { - as: "fetch", - rel: "preload", - key: staticQueryUrl, - href: staticQueryUrl, - crossOrigin: "anonymous" - }))); - - if (appDataUrl) { - headComponents.push( /*#__PURE__*/React.createElement("link", { - as: "fetch", - rel: "preload", - key: appDataUrl, - href: appDataUrl, - crossOrigin: "anonymous" - })); - } + }))); + const appDataUrl = getAppDataUrl(); - styles.slice(0).reverse().forEach(style => { - // Add s for styles that should be prefetched - // otherwise, inline as a "},this.getStyleTags=function(){return e.sealed?D(2):e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)return D(2);var n=((t={})[_]="",t["data-styled-version"]="5.3.0",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),o=Y();return o&&(n.nonce=o),[react__WEBPACK_IMPORTED_MODULE_1___default().createElement("style",v({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new Z({isServer:!0}),this.sealed=!1}var t=e.prototype;return t.collectStyles=function(e){return this.sealed?D(2):react__WEBPACK_IMPORTED_MODULE_1___default().createElement(me,{sheet:this.instance},e)},t.interleaveWithNodeStream=function(e){if(A)return D(3);if(this.sealed)return D(2);this.seal();var t=__webpack_require__(/*! stream */ "stream"),n=(t.Readable,t.Transform),r=e,o=this.instance,i=this._emitSheetCSS,s=new n({transform:function(e,t,n){var r=e.toString(),s=i();if(o.clearTag(),We.test(r)){var a=r.indexOf(">")+1,c=r.slice(0,a),u=r.slice(a);this.push(c+s+u)}else this.push(s+r);n()}});return r.on("error",(function(e){s.emit("error",e)})),r.pipe(s)},e}(),Je=function(e){var t=react__WEBPACK_IMPORTED_MODULE_1___default().forwardRef((function(t,n){var o=(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(Be),s=e.defaultProps,a=Pe(t,o,s);return true&&void 0===a&&console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class "'+b(e)+'"'),react__WEBPACK_IMPORTED_MODULE_1___default().createElement(e,v({},t,{theme:a,ref:n}))}));return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_6___default()(t,e),t.displayName="WithTheme("+b(e)+")",t},Ze=function(){return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(Be)},Xe={StyleSheet:Z,masterSheet:de}; true&&"undefined"!=typeof navigator&&"ReactNative"===navigator.product&&console.warn("It looks like you've imported 'styled-components' on React Native.\nPerhaps you're looking to import 'styled-components/native'?\nRead more about this at https://www.styled-components.com/docs/basics#react-native"), true&&"development";/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Ye); +//# sourceMappingURL=styled-components.esm.js.map - ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () { - // We do an initial pass to gather component names - var componentWillMountUniqueNames = new Set(); - if (pendingComponentWillMountWarnings.length > 0) { - pendingComponentWillMountWarnings.forEach(function (fiber) { - componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component'); - didWarnAboutUnsafeLifecycles.add(fiber.type); - }); - pendingComponentWillMountWarnings = []; - } +/***/ }), - var UNSAFE_componentWillMountUniqueNames = new Set(); +/***/ "./node_modules/styled-system/dist/index.esm.js": +/*!******************************************************!*\ + !*** ./node_modules/styled-system/dist/index.esm.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) { - pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) { - UNSAFE_componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component'); - didWarnAboutUnsafeLifecycles.add(fiber.type); - }); - pendingUNSAFE_ComponentWillMountWarnings = []; - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "get": () => (/* reexport safe */ _styled_system_core__WEBPACK_IMPORTED_MODULE_0__.get), +/* harmony export */ "createParser": () => (/* reexport safe */ _styled_system_core__WEBPACK_IMPORTED_MODULE_0__.createParser), +/* harmony export */ "createStyleFunction": () => (/* reexport safe */ _styled_system_core__WEBPACK_IMPORTED_MODULE_0__.createStyleFunction), +/* harmony export */ "compose": () => (/* reexport safe */ _styled_system_core__WEBPACK_IMPORTED_MODULE_0__.compose), +/* harmony export */ "system": () => (/* reexport safe */ _styled_system_core__WEBPACK_IMPORTED_MODULE_0__.system), +/* harmony export */ "margin": () => (/* reexport safe */ _styled_system_space__WEBPACK_IMPORTED_MODULE_9__.margin), +/* harmony export */ "padding": () => (/* reexport safe */ _styled_system_space__WEBPACK_IMPORTED_MODULE_9__.padding), +/* harmony export */ "space": () => (/* reexport safe */ _styled_system_space__WEBPACK_IMPORTED_MODULE_9__.space), +/* harmony export */ "color": () => (/* reexport safe */ _styled_system_color__WEBPACK_IMPORTED_MODULE_2__.color), +/* harmony export */ "layout": () => (/* reexport safe */ _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.layout), +/* harmony export */ "typography": () => (/* reexport safe */ _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__.typography), +/* harmony export */ "flexbox": () => (/* reexport safe */ _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.flexbox), +/* harmony export */ "border": () => (/* reexport safe */ _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.border), +/* harmony export */ "background": () => (/* reexport safe */ _styled_system_background__WEBPACK_IMPORTED_MODULE_7__.background), +/* harmony export */ "position": () => (/* reexport safe */ _styled_system_position__WEBPACK_IMPORTED_MODULE_8__.position), +/* harmony export */ "grid": () => (/* reexport safe */ _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.grid), +/* harmony export */ "shadow": () => (/* reexport safe */ _styled_system_shadow__WEBPACK_IMPORTED_MODULE_10__.shadow), +/* harmony export */ "boxShadow": () => (/* reexport safe */ _styled_system_shadow__WEBPACK_IMPORTED_MODULE_10__.default), +/* harmony export */ "textShadow": () => (/* reexport safe */ _styled_system_shadow__WEBPACK_IMPORTED_MODULE_10__.default), +/* harmony export */ "variant": () => (/* reexport safe */ _styled_system_variant__WEBPACK_IMPORTED_MODULE_11__.variant), +/* harmony export */ "buttonStyle": () => (/* reexport safe */ _styled_system_variant__WEBPACK_IMPORTED_MODULE_11__.buttonStyle), +/* harmony export */ "textStyle": () => (/* reexport safe */ _styled_system_variant__WEBPACK_IMPORTED_MODULE_11__.textStyle), +/* harmony export */ "colorStyle": () => (/* reexport safe */ _styled_system_variant__WEBPACK_IMPORTED_MODULE_11__.colorStyle), +/* harmony export */ "borders": () => (/* reexport safe */ _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default), +/* harmony export */ "width": () => (/* binding */ width), +/* harmony export */ "height": () => (/* binding */ height), +/* harmony export */ "minWidth": () => (/* binding */ minWidth), +/* harmony export */ "minHeight": () => (/* binding */ minHeight), +/* harmony export */ "maxWidth": () => (/* binding */ maxWidth), +/* harmony export */ "maxHeight": () => (/* binding */ maxHeight), +/* harmony export */ "size": () => (/* binding */ size), +/* harmony export */ "verticalAlign": () => (/* binding */ verticalAlign), +/* harmony export */ "display": () => (/* binding */ display), +/* harmony export */ "overflow": () => (/* binding */ overflow), +/* harmony export */ "overflowX": () => (/* binding */ overflowX), +/* harmony export */ "overflowY": () => (/* binding */ overflowY), +/* harmony export */ "opacity": () => (/* binding */ opacity), +/* harmony export */ "fontSize": () => (/* binding */ fontSize), +/* harmony export */ "fontFamily": () => (/* binding */ fontFamily), +/* harmony export */ "fontWeight": () => (/* binding */ fontWeight), +/* harmony export */ "lineHeight": () => (/* binding */ lineHeight), +/* harmony export */ "textAlign": () => (/* binding */ textAlign), +/* harmony export */ "fontStyle": () => (/* binding */ fontStyle), +/* harmony export */ "letterSpacing": () => (/* binding */ letterSpacing), +/* harmony export */ "alignItems": () => (/* binding */ alignItems), +/* harmony export */ "alignContent": () => (/* binding */ alignContent), +/* harmony export */ "justifyItems": () => (/* binding */ justifyItems), +/* harmony export */ "justifyContent": () => (/* binding */ justifyContent), +/* harmony export */ "flexWrap": () => (/* binding */ flexWrap), +/* harmony export */ "flexDirection": () => (/* binding */ flexDirection), +/* harmony export */ "flex": () => (/* binding */ flex), +/* harmony export */ "flexGrow": () => (/* binding */ flexGrow), +/* harmony export */ "flexShrink": () => (/* binding */ flexShrink), +/* harmony export */ "flexBasis": () => (/* binding */ flexBasis), +/* harmony export */ "justifySelf": () => (/* binding */ justifySelf), +/* harmony export */ "alignSelf": () => (/* binding */ alignSelf), +/* harmony export */ "order": () => (/* binding */ order), +/* harmony export */ "gridGap": () => (/* binding */ gridGap), +/* harmony export */ "gridColumnGap": () => (/* binding */ gridColumnGap), +/* harmony export */ "gridRowGap": () => (/* binding */ gridRowGap), +/* harmony export */ "gridColumn": () => (/* binding */ gridColumn), +/* harmony export */ "gridRow": () => (/* binding */ gridRow), +/* harmony export */ "gridAutoFlow": () => (/* binding */ gridAutoFlow), +/* harmony export */ "gridAutoColumns": () => (/* binding */ gridAutoColumns), +/* harmony export */ "gridAutoRows": () => (/* binding */ gridAutoRows), +/* harmony export */ "gridTemplateColumns": () => (/* binding */ gridTemplateColumns), +/* harmony export */ "gridTemplateRows": () => (/* binding */ gridTemplateRows), +/* harmony export */ "gridTemplateAreas": () => (/* binding */ gridTemplateAreas), +/* harmony export */ "gridArea": () => (/* binding */ gridArea), +/* harmony export */ "borderWidth": () => (/* binding */ borderWidth), +/* harmony export */ "borderStyle": () => (/* binding */ borderStyle), +/* harmony export */ "borderColor": () => (/* binding */ borderColor), +/* harmony export */ "borderTop": () => (/* binding */ borderTop), +/* harmony export */ "borderRight": () => (/* binding */ borderRight), +/* harmony export */ "borderBottom": () => (/* binding */ borderBottom), +/* harmony export */ "borderLeft": () => (/* binding */ borderLeft), +/* harmony export */ "borderRadius": () => (/* binding */ borderRadius), +/* harmony export */ "backgroundImage": () => (/* binding */ backgroundImage), +/* harmony export */ "backgroundSize": () => (/* binding */ backgroundSize), +/* harmony export */ "backgroundPosition": () => (/* binding */ backgroundPosition), +/* harmony export */ "backgroundRepeat": () => (/* binding */ backgroundRepeat), +/* harmony export */ "zIndex": () => (/* binding */ zIndex), +/* harmony export */ "top": () => (/* binding */ top), +/* harmony export */ "right": () => (/* binding */ right), +/* harmony export */ "bottom": () => (/* binding */ bottom), +/* harmony export */ "left": () => (/* binding */ left), +/* harmony export */ "style": () => (/* binding */ style) +/* harmony export */ }); +/* harmony import */ var _styled_system_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @styled-system/core */ "./node_modules/@styled-system/core/dist/index.esm.js"); +/* harmony import */ var _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @styled-system/layout */ "./node_modules/@styled-system/layout/dist/index.esm.js"); +/* harmony import */ var _styled_system_color__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @styled-system/color */ "./node_modules/@styled-system/color/dist/index.esm.js"); +/* harmony import */ var _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @styled-system/typography */ "./node_modules/@styled-system/typography/dist/index.esm.js"); +/* harmony import */ var _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @styled-system/flexbox */ "./node_modules/@styled-system/flexbox/dist/index.esm.js"); +/* harmony import */ var _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @styled-system/grid */ "./node_modules/@styled-system/grid/dist/index.esm.js"); +/* harmony import */ var _styled_system_border__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @styled-system/border */ "./node_modules/@styled-system/border/dist/index.esm.js"); +/* harmony import */ var _styled_system_background__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @styled-system/background */ "./node_modules/@styled-system/background/dist/index.esm.js"); +/* harmony import */ var _styled_system_position__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @styled-system/position */ "./node_modules/@styled-system/position/dist/index.esm.js"); +/* harmony import */ var _styled_system_space__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @styled-system/space */ "./node_modules/@styled-system/space/dist/index.esm.js"); +/* harmony import */ var _styled_system_shadow__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @styled-system/shadow */ "./node_modules/@styled-system/shadow/dist/index.esm.js"); +/* harmony import */ var _styled_system_variant__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @styled-system/variant */ "./node_modules/@styled-system/variant/dist/index.esm.js"); + // v4 api shims + + + + + + + + + + + + + + + + + + + + + + +var width = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.width, + height = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.height, + minWidth = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.minWidth, + minHeight = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.minHeight, + maxWidth = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.maxWidth, + maxHeight = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.maxHeight, + size = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.size, + verticalAlign = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.verticalAlign, + display = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.display, + overflow = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.overflow, + overflowX = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.overflowX, + overflowY = _styled_system_layout__WEBPACK_IMPORTED_MODULE_1__.default.overflowY; +var opacity = _styled_system_color__WEBPACK_IMPORTED_MODULE_2__.default.opacity; +var fontSize = _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__.default.fontSize, + fontFamily = _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__.default.fontFamily, + fontWeight = _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__.default.fontWeight, + lineHeight = _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__.default.lineHeight, + textAlign = _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__.default.textAlign, + fontStyle = _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__.default.fontStyle, + letterSpacing = _styled_system_typography__WEBPACK_IMPORTED_MODULE_3__.default.letterSpacing; +var alignItems = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.alignItems, + alignContent = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.alignContent, + justifyItems = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.justifyItems, + justifyContent = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.justifyContent, + flexWrap = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.flexWrap, + flexDirection = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.flexDirection, + flex = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.flex, + flexGrow = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.flexGrow, + flexShrink = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.flexShrink, + flexBasis = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.flexBasis, + justifySelf = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.justifySelf, + alignSelf = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.alignSelf, + order = _styled_system_flexbox__WEBPACK_IMPORTED_MODULE_4__.default.order; +var gridGap = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridGap, + gridColumnGap = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridColumnGap, + gridRowGap = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridRowGap, + gridColumn = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridColumn, + gridRow = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridRow, + gridAutoFlow = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridAutoFlow, + gridAutoColumns = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridAutoColumns, + gridAutoRows = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridAutoRows, + gridTemplateColumns = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridTemplateColumns, + gridTemplateRows = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridTemplateRows, + gridTemplateAreas = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridTemplateAreas, + gridArea = _styled_system_grid__WEBPACK_IMPORTED_MODULE_5__.default.gridArea; +var borderWidth = _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default.borderWidth, + borderStyle = _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default.borderStyle, + borderColor = _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default.borderColor, + borderTop = _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default.borderTop, + borderRight = _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default.borderRight, + borderBottom = _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default.borderBottom, + borderLeft = _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default.borderLeft, + borderRadius = _styled_system_border__WEBPACK_IMPORTED_MODULE_6__.default.borderRadius; +var backgroundImage = _styled_system_background__WEBPACK_IMPORTED_MODULE_7__.default.backgroundImage, + backgroundSize = _styled_system_background__WEBPACK_IMPORTED_MODULE_7__.default.backgroundSize, + backgroundPosition = _styled_system_background__WEBPACK_IMPORTED_MODULE_7__.default.backgroundPosition, + backgroundRepeat = _styled_system_background__WEBPACK_IMPORTED_MODULE_7__.default.backgroundRepeat; +var zIndex = _styled_system_position__WEBPACK_IMPORTED_MODULE_8__.default.zIndex, + top = _styled_system_position__WEBPACK_IMPORTED_MODULE_8__.default.top, + right = _styled_system_position__WEBPACK_IMPORTED_MODULE_8__.default.right, + bottom = _styled_system_position__WEBPACK_IMPORTED_MODULE_8__.default.bottom, + left = _styled_system_position__WEBPACK_IMPORTED_MODULE_8__.default.left; + + // v4 style API shim + +var style = function style(_ref) { + var prop = _ref.prop, + cssProperty = _ref.cssProperty, + alias = _ref.alias, + key = _ref.key, + transformValue = _ref.transformValue, + scale = _ref.scale, + properties = _ref.properties; + var config = {}; + config[prop] = (0,_styled_system_core__WEBPACK_IMPORTED_MODULE_0__.createStyleFunction)({ + properties: properties, + property: cssProperty || prop, + scale: key, + defaultScale: scale, + transform: transformValue + }); + if (alias) config[alias] = config[prop]; + var parse = (0,_styled_system_core__WEBPACK_IMPORTED_MODULE_0__.createParser)(config); + return parse; +}; - var componentWillReceivePropsUniqueNames = new Set(); - if (pendingComponentWillReceivePropsWarnings.length > 0) { - pendingComponentWillReceivePropsWarnings.forEach(function (fiber) { - componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component'); - didWarnAboutUnsafeLifecycles.add(fiber.type); - }); - pendingComponentWillReceivePropsWarnings = []; - } +/***/ }), - var UNSAFE_componentWillReceivePropsUniqueNames = new Set(); +/***/ "./node_modules/supports-color/index.js": +/*!**********************************************!*\ + !*** ./node_modules/supports-color/index.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) { - pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) { - UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component'); - didWarnAboutUnsafeLifecycles.add(fiber.type); - }); - pendingUNSAFE_ComponentWillReceivePropsWarnings = []; - } +"use strict"; - var componentWillUpdateUniqueNames = new Set(); +const os = __webpack_require__(/*! os */ "os"); +const hasFlag = __webpack_require__(/*! has-flag */ "./node_modules/has-flag/index.js"); - if (pendingComponentWillUpdateWarnings.length > 0) { - pendingComponentWillUpdateWarnings.forEach(function (fiber) { - componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component'); - didWarnAboutUnsafeLifecycles.add(fiber.type); - }); - pendingComponentWillUpdateWarnings = []; - } +const env = ({}); - var UNSAFE_componentWillUpdateUniqueNames = new Set(); +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + forceColor = false; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = true; +} +if ('FORCE_COLOR' in env) { + forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; +} - if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) { - pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) { - UNSAFE_componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component'); - didWarnAboutUnsafeLifecycles.add(fiber.type); - }); - pendingUNSAFE_ComponentWillUpdateWarnings = []; - } // Finally, we flush all the warnings - // UNSAFE_ ones before the deprecated ones, since they'll be 'louder' +function translateLevel(level) { + if (level === 0) { + return false; + } + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} - if (UNSAFE_componentWillMountUniqueNames.size > 0) { - var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames); +function supportsColor(stream) { + if (forceColor === false) { + return 0; + } - error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '\nPlease update the following components: %s', sortedNames); - } + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } - if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) { - var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames); + if (hasFlag('color=256')) { + return 2; + } - error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, " + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\n' + '\nPlease update the following components: %s', _sortedNames); - } + if (stream && !stream.isTTY && forceColor !== true) { + return 0; + } - if (UNSAFE_componentWillUpdateUniqueNames.size > 0) { - var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames); + const min = forceColor ? 1 : 0; + + if (process.platform === 'win32') { + // Node.js 7.5.0 is the first version of Node.js to include a patch to + // libuv that enables 256 color output on Windows. Anything earlier and it + // won't work. However, here we target Node.js 8 at minimum as it is an LTS + // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows + // release that supports 256 colors. Windows 10 build 14931 is the first release + // that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(process.versions.node.split('.')[0]) >= 8 && + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } - error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '\nPlease update the following components: %s', _sortedNames2); - } + return 1; + } - if (componentWillMountUniqueNames.size > 0) { - var _sortedNames3 = setToSortedString(componentWillMountUniqueNames); + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } - warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames3); - } + return min; + } - if (componentWillReceivePropsUniqueNames.size > 0) { - var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames); + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } - warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, refactor your " + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames4); - } + if (env.COLORTERM === 'truecolor') { + return 3; + } - if (componentWillUpdateUniqueNames.size > 0) { - var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames); + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames5); - } - }; + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } - var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about. + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } - var didWarnAboutLegacyContext = new Set(); + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } - ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) { - var strictRoot = findStrictRoot(fiber); + if ('COLORTERM' in env) { + return 1; + } - if (strictRoot === null) { - error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.'); + if (env.TERM === 'dumb') { + return min; + } - return; - } // Dedup strategy: Warn once per component. + return min; +} +function getSupportLevel(stream) { + const level = supportsColor(stream); + return translateLevel(level); +} - if (didWarnAboutLegacyContext.has(fiber.type)) { - return; - } +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr) +}; - var warningsForRoot = pendingLegacyContextWarning.get(strictRoot); - if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') { - if (warningsForRoot === undefined) { - warningsForRoot = []; - pendingLegacyContextWarning.set(strictRoot, warningsForRoot); - } +/***/ }), - warningsForRoot.push(fiber); - } - }; +/***/ "./node_modules/tippy.js/dist/tippy.chunk.esm.js": +/*!*******************************************************!*\ + !*** ./node_modules/tippy.js/dist/tippy.chunk.esm.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - ReactStrictModeWarnings.flushLegacyContextWarning = function () { - pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) { - if (fiberArray.length === 0) { - return; - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "B": () => (/* binding */ BACKDROP_CLASS), +/* harmony export */ "R": () => (/* binding */ ROUND_ARROW), +/* harmony export */ "_": () => (/* binding */ _extends), +/* harmony export */ "a": () => (/* binding */ div), +/* harmony export */ "b": () => (/* binding */ isMouseEvent), +/* harmony export */ "c": () => (/* binding */ currentInput), +/* harmony export */ "d": () => (/* binding */ defaultProps), +/* harmony export */ "e": () => (/* binding */ errorWhen), +/* harmony export */ "f": () => (/* binding */ closestCallback), +/* harmony export */ "g": () => (/* binding */ getOwnerDocument), +/* harmony export */ "h": () => (/* binding */ getBasePlacement), +/* harmony export */ "i": () => (/* binding */ includes), +/* harmony export */ "j": () => (/* binding */ arrayFrom), +/* harmony export */ "k": () => (/* binding */ hideAll), +/* harmony export */ "l": () => (/* binding */ createTippyWithPlugins), +/* harmony export */ "m": () => (/* binding */ isBrowser), +/* harmony export */ "n": () => (/* binding */ normalizeToArray), +/* harmony export */ "r": () => (/* binding */ removeProperties), +/* harmony export */ "s": () => (/* binding */ setVisibilityState), +/* harmony export */ "t": () => (/* binding */ tippy), +/* harmony export */ "u": () => (/* binding */ useIfDefined), +/* harmony export */ "w": () => (/* binding */ warnWhen) +/* harmony export */ }); +/* harmony import */ var popper_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js"); +/**! +* tippy.js v5.2.1 +* (c) 2017-2020 atomiks +* MIT License +*/ - var firstFiber = fiberArray[0]; - var uniqueNames = new Set(); - fiberArray.forEach(function (fiber) { - uniqueNames.add(getComponentName(fiber.type) || 'Component'); - didWarnAboutLegacyContext.add(fiber.type); - }); - var sortedNames = setToSortedString(uniqueNames); - var firstComponentStack = getStackByFiberInDevAndProd(firstFiber); - error('Legacy context API has been detected within a strict-mode tree.' + '\n\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\n\nPlease update the following components: %s' + '\n\nLearn more about this warning here: https://fb.me/react-legacy-context' + '%s', sortedNames, firstComponentStack); - }); +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; }; - ReactStrictModeWarnings.discardPendingWarnings = function () { - pendingComponentWillMountWarnings = []; - pendingUNSAFE_ComponentWillMountWarnings = []; - pendingComponentWillReceivePropsWarnings = []; - pendingUNSAFE_ComponentWillReceivePropsWarnings = []; - pendingComponentWillUpdateWarnings = []; - pendingUNSAFE_ComponentWillUpdateWarnings = []; - pendingLegacyContextWarning = new Map(); - }; + return _extends.apply(this, arguments); } -var resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below. +var version = "5.2.1"; -var failedBoundaries = null; -var setRefreshHandler = function (handler) { - { - resolveFamily = handler; +/** + * Triggers reflow + */ +function reflow(element) { + void element.offsetHeight; +} +/** + * Sets the innerHTML of an element + */ + +function setInnerHTML(element, html) { + element[innerHTML()] = html; +} +/** + * Determines if the value is a reference element + */ + +function isReferenceElement(value) { + return !!(value && value._tippy && value._tippy.reference === value); +} +/** + * Safe .hasOwnProperty check, for prototype-less objects + */ + +function hasOwnProperty(obj, key) { + return {}.hasOwnProperty.call(obj, key); +} +/** + * Returns an array of elements based on the value + */ + +function getArrayOfElements(value) { + if (isElement(value)) { + return [value]; } -}; -function resolveFunctionForHotReloading(type) { - { - if (resolveFamily === null) { - // Hot reloading is disabled. - return type; - } - var family = resolveFamily(type); + if (isNodeList(value)) { + return arrayFrom(value); + } - if (family === undefined) { - return type; - } // Use the latest known implementation. + if (Array.isArray(value)) { + return value; + } + return arrayFrom(document.querySelectorAll(value)); +} +/** + * Returns a value at a given index depending on if it's an array or number + */ - return family.current; +function getValueAtIndexOrReturn(value, index, defaultValue) { + if (Array.isArray(value)) { + var v = value[index]; + return v == null ? Array.isArray(defaultValue) ? defaultValue[index] : defaultValue : v; } + + return value; } -function resolveClassForHotReloading(type) { - // No implementation differences. - return resolveFunctionForHotReloading(type); +/** + * Prevents errors from being thrown while accessing nested modifier objects + * in `popperOptions` + */ + +function getModifier(obj, key) { + return obj && obj.modifiers && obj.modifiers[key]; } -function resolveForwardRefForHotReloading(type) { - { - if (resolveFamily === null) { - // Hot reloading is disabled. - return type; - } +/** + * Determines if the value is of type + */ - var family = resolveFamily(type); +function isType(value, type) { + var str = {}.toString.call(value); + return str.indexOf('[object') === 0 && str.indexOf(type + "]") > -1; +} +/** + * Determines if the value is of type Element + */ - if (family === undefined) { - // Check if we're dealing with a real forwardRef. Don't want to crash early. - if (type !== null && type !== undefined && typeof type.render === 'function') { - // ForwardRef is special because its resolved .type is an object, - // but it's possible that we only have its inner render function in the map. - // If that inner render function is different, we'll build a new forwardRef type. - var currentRender = resolveFunctionForHotReloading(type.render); +function isElement(value) { + return isType(value, 'Element'); +} +/** + * Determines if the value is of type NodeList + */ - if (type.render !== currentRender) { - var syntheticType = { - $$typeof: REACT_FORWARD_REF_TYPE, - render: currentRender - }; +function isNodeList(value) { + return isType(value, 'NodeList'); +} +/** + * Determines if the value is of type MouseEvent + */ - if (type.displayName !== undefined) { - syntheticType.displayName = type.displayName; - } +function isMouseEvent(value) { + return isType(value, 'MouseEvent'); +} +/** + * Firefox extensions don't allow setting .innerHTML directly, this will trick + * it + */ - return syntheticType; - } - } +function innerHTML() { + return 'innerHTML'; +} +/** + * Evaluates a function if one, or returns the value + */ - return type; - } // Use the latest known implementation. +function invokeWithArgsOrReturn(value, args) { + return typeof value === 'function' ? value.apply(void 0, args) : value; +} +/** + * Sets a popperInstance modifier's property to a value + */ +function setModifierValue(modifiers, name, property, value) { + modifiers.filter(function (m) { + return m.name === name; + })[0][property] = value; +} +/** + * Returns a new `div` element + */ - return family.current; - } +function div() { + return document.createElement('div'); } -function isCompatibleFamilyForHotReloading(fiber, element) { - { - if (resolveFamily === null) { - // Hot reloading is disabled. - return false; +/** + * Applies a transition duration to a list of elements + */ + +function setTransitionDuration(els, value) { + els.forEach(function (el) { + if (el) { + el.style.transitionDuration = value + "ms"; + } + }); +} +/** + * Sets the visibility state to elements so they can begin to transition + */ + +function setVisibilityState(els, state) { + els.forEach(function (el) { + if (el) { + el.setAttribute('data-state', state); } + }); +} +/** + * Debounce utility. To avoid bloating bundle size, we're only passing 1 + * argument here, a more generic function would pass all arguments. Only + * `onMouseMove` uses this which takes the event object for now. + */ - var prevType = fiber.elementType; - var nextType = element.type; // If we got here, we know types aren't === equal. +function debounce(fn, ms) { + // Avoid wrapping in `setTimeout` if ms is 0 anyway + if (ms === 0) { + return fn; + } - var needsCompareFamilies = false; - var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null; + var timeout; + return function (arg) { + clearTimeout(timeout); + timeout = setTimeout(function () { + fn(arg); + }, ms); + }; +} +/** + * Preserves the original function invocation when another function replaces it + */ - switch (fiber.tag) { - case ClassComponent: - { - if (typeof nextType === 'function') { - needsCompareFamilies = true; - } +function preserveInvocation(originalFn, currentFn, args) { + if (originalFn && originalFn !== currentFn) { + originalFn.apply(void 0, args); + } +} +/** + * Deletes properties from an object (pure) + */ - break; - } +function removeProperties(obj, keys) { + var clone = _extends({}, obj); - case FunctionComponent: - { - if (typeof nextType === 'function') { - needsCompareFamilies = true; - } else if ($$typeofNextType === REACT_LAZY_TYPE) { - // We don't know the inner type yet. - // We're going to assume that the lazy inner type is stable, - // and so it is sufficient to avoid reconciling it away. - // We're not going to unwrap or actually use the new lazy type. - needsCompareFamilies = true; - } + keys.forEach(function (key) { + delete clone[key]; + }); + return clone; +} +/** + * Ponyfill for Array.from - converts iterable values to an array + */ - break; - } +function arrayFrom(value) { + return [].slice.call(value); +} +/** + * Works like Element.prototype.closest, but uses a callback instead + */ - case ForwardRef: - { - if ($$typeofNextType === REACT_FORWARD_REF_TYPE) { - needsCompareFamilies = true; - } else if ($$typeofNextType === REACT_LAZY_TYPE) { - needsCompareFamilies = true; - } +function closestCallback(element, callback) { + while (element) { + if (callback(element)) { + return element; + } - break; - } + element = element.parentElement; + } - case MemoComponent: - case SimpleMemoComponent: - { - if ($$typeofNextType === REACT_MEMO_TYPE) { - // TODO: if it was but can no longer be simple, - // we shouldn't set this. - needsCompareFamilies = true; - } else if ($$typeofNextType === REACT_LAZY_TYPE) { - needsCompareFamilies = true; - } + return null; +} +/** + * Determines if an array or string includes a string + */ - break; - } +function includes(a, b) { + return a.indexOf(b) > -1; +} +/** + * Creates an array from string of values separated by whitespace + */ - default: - return false; - } // Check if both types have a family and it's the same one. +function splitBySpaces(value) { + return value.split(/\s+/).filter(Boolean); +} +/** + * Returns the `nextValue` if `nextValue` is not `undefined`, otherwise returns + * `currentValue` + */ +function useIfDefined(nextValue, currentValue) { + return nextValue !== undefined ? nextValue : currentValue; +} +/** + * Converts a value that's an array or single value to an array + */ - if (needsCompareFamilies) { - // Note: memo() and forwardRef() we'll compare outer rather than inner type. - // This means both of them need to be registered to preserve state. - // If we unwrapped and compared the inner types for wrappers instead, - // then we would risk falsely saying two separate memo(Foo) - // calls are equivalent because they wrap the same Foo function. - var prevFamily = resolveFamily(prevType); +function normalizeToArray(value) { + return [].concat(value); +} +/** + * Returns the ownerDocument of the first available element, otherwise global + * document + */ - if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) { - return true; - } - } +function getOwnerDocument(elementOrElements) { + var _normalizeToArray = normalizeToArray(elementOrElements), + element = _normalizeToArray[0]; - return false; + return element ? element.ownerDocument || document : document; +} +/** + * Adds item to array if array does not contain it + */ + +function pushIfUnique(arr, value) { + if (arr.indexOf(value) === -1) { + arr.push(value); } } -function markFailedErrorBoundaryForHotReloading(fiber) { - { - if (resolveFamily === null) { - // Hot reloading is disabled. - return; - } +/** + * Adds `px` if value is a number, or returns it directly + */ - if (typeof WeakSet !== 'function') { - return; - } +function appendPxIfNumber(value) { + return typeof value === 'number' ? value + "px" : value; +} +/** + * Filters out duplicate elements in an array + */ - if (failedBoundaries === null) { - failedBoundaries = new WeakSet(); - } +function unique(arr) { + return arr.filter(function (item, index) { + return arr.indexOf(item) === index; + }); +} +/** + * Returns number from number or CSS units string + */ - failedBoundaries.add(fiber); - } +function getNumber(value) { + return typeof value === 'number' ? value : parseFloat(value); } -var scheduleRefresh = function (root, update) { - { - if (resolveFamily === null) { - // Hot reloading is disabled. - return; - } +/** + * Gets number or CSS string units in pixels (e.g. `1rem` -> 16) + */ - var staleFamilies = update.staleFamilies, - updatedFamilies = update.updatedFamilies; - flushPassiveEffects(); - flushSync(function () { - scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies); - }); - } -}; -var scheduleRoot = function (root, element) { - { - if (root.context !== emptyContextObject) { - // Super edge case: root has a legacy _renderSubtree context - // but we don't know the parentComponent so we can't pass it. - // Just ignore. We'll delete this with _renderSubtree code path later. - return; - } +function getUnitsInPx(doc, value) { + var isRem = typeof value === 'string' && includes(value, 'rem'); + var html = doc.documentElement; + var rootFontSize = 16; - flushPassiveEffects(); - syncUpdates(function () { - updateContainer(element, root, null, null); - }); + if (html && isRem) { + return parseFloat(getComputedStyle(html).fontSize || String(rootFontSize)) * getNumber(value); } -}; -function scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) { - { - var alternate = fiber.alternate, - child = fiber.child, - sibling = fiber.sibling, - tag = fiber.tag, - type = fiber.type; - var candidateType = null; + return getNumber(value); +} +/** + * Adds the `distancePx` value to the placement of a Popper.Padding object + */ - switch (tag) { - case FunctionComponent: - case SimpleMemoComponent: - case ClassComponent: - candidateType = type; - break; +function getComputedPadding(basePlacement, padding, distancePx) { + if (padding === void 0) { + padding = 5; + } - case ForwardRef: - candidateType = type.render; - break; - } + var freshPaddingObject = { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; + var keys = Object.keys(freshPaddingObject); + return keys.reduce(function (obj, key) { + obj[key] = typeof padding === 'number' ? padding : padding[key]; - if (resolveFamily === null) { - throw new Error('Expected resolveFamily to be set during hot reload.'); + if (basePlacement === key) { + obj[key] = typeof padding === 'number' ? padding + distancePx : padding[basePlacement] + distancePx; } - var needsRender = false; - var needsRemount = false; + return obj; + }, freshPaddingObject); +} - if (candidateType !== null) { - var family = resolveFamily(candidateType); +function createMemoryLeakWarning(method) { + var txt = method === 'destroy' ? 'n already-' : ' '; + return "\n " + method + "() was called on a" + txt + "destroyed instance. This is a no-op but\n indicates a potential memory leak.\n "; +} +function clean(value) { + var spacesAndTabs = /[ \t]{2,}/g; + var lineStartWithSpaces = /^[ \t]*/gm; + return value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim(); +} - if (family !== undefined) { - if (staleFamilies.has(family)) { - needsRemount = true; - } else if (updatedFamilies.has(family)) { - if (tag === ClassComponent) { - needsRemount = true; - } else { - needsRender = true; - } - } - } - } +function getDevMessage(message) { + return clean("\n %ctippy.js\n\n %c" + clean(message) + "\n\n %c\uD83D\uDC77\u200D This is a development-only message. It will be removed in production.\n "); +} - if (failedBoundaries !== null) { - if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) { - needsRemount = true; - } - } +function getFormattedMessage(message) { + return [getDevMessage(message), // title + 'color: #00C584; font-size: 1.3em; font-weight: bold;', // message + 'line-height: 1.5', // footer + 'color: #a6a095;']; +} +/** + * Helpful wrapper around `console.warn()`. + * TODO: Should we use a cache so it only warns a single time and not spam the + * console? (Need to consider hot reloading and invalidation though). Chrome + * already batches warnings as well. + */ - if (needsRemount) { - fiber._debugNeedsRemount = true; - } +function warnWhen(condition, message) { + if (condition) { + var _console; - if (needsRemount || needsRender) { - scheduleWork(fiber, Sync); - } + (_console = console).warn.apply(_console, getFormattedMessage(message)); + } +} +/** + * Helpful wrapper around `console.error()` + */ - if (child !== null && !needsRemount) { - scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies); - } +function errorWhen(condition, message) { + if (condition) { + var _console2; - if (sibling !== null) { - scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies); - } + (_console2 = console).error.apply(_console2, getFormattedMessage(message)); } } +/** + * Validates the `targets` value passed to `tippy()` + */ -var findHostInstancesForRefresh = function (root, families) { - { - var hostInstances = new Set(); - var types = new Set(families.map(function (family) { - return family.current; - })); - findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances); - return hostInstances; - } +function validateTargets(targets) { + var didPassFalsyValue = !targets; + var didPassPlainObject = Object.prototype.toString.call(targets) === '[object Object]' && !targets.addEventListener; + errorWhen(didPassFalsyValue, ['tippy() was passed', '`' + String(targets) + '`', 'as its targets (first) argument. Valid types are: String, Element, Element[],', 'or NodeList.'].join(' ')); + errorWhen(didPassPlainObject, ['tippy() was passed a plain object which is no longer supported as an argument.', 'See: https://atomiks.github.io/tippyjs/misc/#custom-position'].join(' ')); +} + +var pluginProps = { + animateFill: false, + followCursor: false, + inlinePositioning: false, + sticky: false }; +var defaultProps = _extends({ + allowHTML: true, + animation: 'fade', + appendTo: function appendTo() { + return document.body; + }, + aria: 'describedby', + arrow: true, + boundary: 'scrollParent', + content: '', + delay: 0, + distance: 10, + duration: [300, 250], + flip: true, + flipBehavior: 'flip', + flipOnUpdate: false, + hideOnClick: true, + ignoreAttributes: false, + inertia: false, + interactive: false, + interactiveBorder: 2, + interactiveDebounce: 0, + lazy: true, + maxWidth: 350, + multiple: false, + offset: 0, + onAfterUpdate: function onAfterUpdate() {}, + onBeforeUpdate: function onBeforeUpdate() {}, + onCreate: function onCreate() {}, + onDestroy: function onDestroy() {}, + onHidden: function onHidden() {}, + onHide: function onHide() {}, + onMount: function onMount() {}, + onShow: function onShow() {}, + onShown: function onShown() {}, + onTrigger: function onTrigger() {}, + onUntrigger: function onUntrigger() {}, + placement: 'top', + plugins: [], + popperOptions: {}, + role: 'tooltip', + showOnCreate: false, + theme: '', + touch: true, + trigger: 'mouseenter focus', + triggerTarget: null, + updateDuration: 0, + zIndex: 9999 +}, pluginProps); +var defaultKeys = Object.keys(defaultProps); +/** + * If the setProps() method encounters one of these, the popperInstance must be + * recreated + */ -function findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) { - { - var child = fiber.child, - sibling = fiber.sibling, - tag = fiber.tag, - type = fiber.type; - var candidateType = null; +var POPPER_INSTANCE_DEPENDENCIES = ['arrow', 'boundary', 'distance', 'flip', 'flipBehavior', 'flipOnUpdate', 'offset', 'placement', 'popperOptions']; +/** + * Mutates the defaultProps object by setting the props specified + */ - switch (tag) { - case FunctionComponent: - case SimpleMemoComponent: - case ClassComponent: - candidateType = type; - break; +var setDefaultProps = function setDefaultProps(partialProps) { + if (true) { + validateProps(partialProps, []); + } - case ForwardRef: - candidateType = type.render; - break; + var keys = Object.keys(partialProps); + keys.forEach(function (key) { + defaultProps[key] = partialProps[key]; + }); +}; +/** + * Returns an extended props object including plugin props + */ + +function getExtendedPassedProps(passedProps) { + var plugins = passedProps.plugins || []; + var pluginProps = plugins.reduce(function (acc, plugin) { + var name = plugin.name, + defaultValue = plugin.defaultValue; + + if (name) { + acc[name] = passedProps[name] !== undefined ? passedProps[name] : defaultValue; } - var didMatch = false; + return acc; + }, {}); + return _extends({}, passedProps, {}, pluginProps); +} +/** + * Returns an object of optional props from data-tippy-* attributes + */ - if (candidateType !== null) { - if (types.has(candidateType)) { - didMatch = true; - } +function getDataAttributeProps(reference, plugins) { + var propKeys = plugins ? Object.keys(getExtendedPassedProps(_extends({}, defaultProps, { + plugins: plugins + }))) : defaultKeys; + var props = propKeys.reduce(function (acc, key) { + var valueAsString = (reference.getAttribute("data-tippy-" + key) || '').trim(); + + if (!valueAsString) { + return acc; } - if (didMatch) { - // We have a match. This only drills down to the closest host components. - // There's no need to search deeper because for the purpose of giving - // visual feedback, "flashing" outermost parent rectangles is sufficient. - findHostInstancesForFiberShallowly(fiber, hostInstances); + if (key === 'content') { + acc[key] = valueAsString; } else { - // If there's no match, maybe there will be one further down in the child tree. - if (child !== null) { - findHostInstancesForMatchingFibersRecursively(child, types, hostInstances); + try { + acc[key] = JSON.parse(valueAsString); + } catch (e) { + acc[key] = valueAsString; } } - if (sibling !== null) { - findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances); - } - } + return acc; + }, {}); + return props; } +/** + * Evaluates the props object by merging data attributes and disabling + * conflicting props where necessary + */ -function findHostInstancesForFiberShallowly(fiber, hostInstances) { - { - var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances); - - if (foundHostInstances) { - return; - } // If we didn't find any host children, fallback to closest host parent. +function evaluateProps(reference, props) { + var out = _extends({}, props, { + content: invokeWithArgsOrReturn(props.content, [reference]) + }, props.ignoreAttributes ? {} : getDataAttributeProps(reference, props.plugins)); + if (out.interactive) { + out.aria = null; + } - var node = fiber; + return out; +} +/** + * Validates props with the valid `defaultProps` object + */ - while (true) { - switch (node.tag) { - case HostComponent: - hostInstances.add(node.stateNode); - return; +function validateProps(partialProps, plugins) { + if (partialProps === void 0) { + partialProps = {}; + } - case HostPortal: - hostInstances.add(node.stateNode.containerInfo); - return; + if (plugins === void 0) { + plugins = []; + } - case HostRoot: - hostInstances.add(node.stateNode.containerInfo); - return; - } + var keys = Object.keys(partialProps); + keys.forEach(function (prop) { + var value = partialProps[prop]; + var didSpecifyPlacementInPopperOptions = prop === 'popperOptions' && value !== null && typeof value === 'object' && hasOwnProperty(value, 'placement'); + var nonPluginProps = removeProperties(defaultProps, ['animateFill', 'followCursor', 'inlinePositioning', 'sticky']); // These props have custom warnings - if (node.return === null) { - throw new Error('Expected to reach root first.'); - } + var customWarningProps = ['a11y', 'arrowType', 'showOnInit', 'size', 'target', 'touchHold']; + var didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop) && !includes(customWarningProps, prop); // Check if the prop exists in `plugins` - node = node.return; + if (didPassUnknownProp) { + didPassUnknownProp = plugins.filter(function (plugin) { + return plugin.name === prop; + }).length === 0; } - } -} - -function findChildHostInstancesForFiberShallowly(fiber, hostInstances) { - { - var node = fiber; - var foundHostInstances = false; - while (true) { - if (node.tag === HostComponent) { - // We got a match. - foundHostInstances = true; - hostInstances.add(node.stateNode); // There may still be more, so keep searching. - } else if (node.child !== null) { - node.child.return = node; - node = node.child; - continue; - } + warnWhen(prop === 'target', ['The `target` prop was removed in v5 and replaced with the delegate() addon', 'in order to conserve bundle size.', 'See: https://atomiks.github.io/tippyjs/addons/#event-delegation'].join(' ')); + warnWhen(prop === 'a11y', ['The `a11y` prop was removed in v5. Make sure the element you are giving a', 'tippy to is natively focusable, such as