139 lines
5.2 KiB
JavaScript
139 lines
5.2 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
|
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
|
|
var _apiRunnerBrowser = require("./api-runner-browser");
|
|
|
|
var _react = _interopRequireDefault(require("react"));
|
|
|
|
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
|
|
var _router = require("@reach/router");
|
|
|
|
var _gatsbyReactRouterScroll = require("gatsby-react-router-scroll");
|
|
|
|
var _domready = _interopRequireDefault(require("@mikaelkristiansson/domready"));
|
|
|
|
var _navigation = require("./navigation");
|
|
|
|
var _emitter = _interopRequireDefault(require("./emitter"));
|
|
|
|
var _pageRenderer = _interopRequireDefault(require("./page-renderer"));
|
|
|
|
var _asyncRequires = _interopRequireDefault(require("./async-requires"));
|
|
|
|
var _loader = require("./loader");
|
|
|
|
var _ensureResources = _interopRequireDefault(require("./ensure-resources"));
|
|
|
|
var _stripPrefix = _interopRequireDefault(require("./strip-prefix"));
|
|
|
|
var _matchPaths = _interopRequireDefault(require("./match-paths.json"));
|
|
|
|
// Generated during bootstrap
|
|
const loader = new _loader.ProdLoader(_asyncRequires.default, _matchPaths.default);
|
|
(0, _loader.setLoader)(loader);
|
|
loader.setApiRunner(_apiRunnerBrowser.apiRunner);
|
|
window.asyncRequires = _asyncRequires.default;
|
|
window.___emitter = _emitter.default;
|
|
window.___loader = _loader.publicLoader;
|
|
(0, _navigation.init)();
|
|
(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) {
|
|
require(`./register-service-worker`);
|
|
} // In gatsby v2 if Router is used in page using matchPaths
|
|
// paths need to contain full path.
|
|
// For example:
|
|
// - page have `/app/*` matchPath
|
|
// - inside template user needs to use `/app/xyz` as path
|
|
// Resetting `basepath`/`baseuri` keeps current behaviour
|
|
// to not introduce breaking change.
|
|
// Remove this in v3
|
|
|
|
|
|
const RouteHandler = props => _react.default.createElement(_router.BaseContext.Provider, {
|
|
value: {
|
|
baseuri: `/`,
|
|
basepath: `/`
|
|
}
|
|
}, _react.default.createElement(_pageRenderer.default, props));
|
|
|
|
class LocationHandler extends _react.default.Component {
|
|
render() {
|
|
const {
|
|
location
|
|
} = this.props;
|
|
return _react.default.createElement(_ensureResources.default, {
|
|
location: location
|
|
}, ({
|
|
pageResources,
|
|
location
|
|
}) => _react.default.createElement(_navigation.RouteUpdates, {
|
|
location: location
|
|
}, _react.default.createElement(_gatsbyReactRouterScroll.ScrollContext, {
|
|
location: location,
|
|
shouldUpdateScroll: _navigation.shouldUpdateScroll
|
|
}, _react.default.createElement(_router.Router, {
|
|
basepath: __BASE_PATH__,
|
|
location: location,
|
|
id: "gatsby-focus-wrapper"
|
|
}, _react.default.createElement(RouteHandler, (0, _extends2.default)({
|
|
path: pageResources.page.path === `/404.html` ? (0, _stripPrefix.default)(location.pathname, __BASE_PATH__) : encodeURI(pageResources.page.matchPath || pageResources.page.path)
|
|
}, this.props, {
|
|
location: location,
|
|
pageResources: pageResources
|
|
}, pageResources.json))))));
|
|
}
|
|
|
|
}
|
|
|
|
const {
|
|
pagePath,
|
|
location: browserLoc
|
|
} = window; // Explicitly call navigate if the canonical path (window.pagePath)
|
|
// is different to the browser path (window.location.pathname). But
|
|
// only if NONE of the following conditions hold:
|
|
//
|
|
// - The url matches a client side route (page.matchPath)
|
|
// - it's a 404 page
|
|
// - 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, {
|
|
replace: true
|
|
});
|
|
}
|
|
|
|
_loader.publicLoader.loadPage(browserLoc.pathname).then(page => {
|
|
if (!page || page.status === `error`) {
|
|
throw new Error(`page resources for ${browserLoc.pathname} not found. Not rendering React`);
|
|
}
|
|
|
|
window.___webpackCompilationHash = page.page.webpackCompilationHash;
|
|
|
|
const Root = () => _react.default.createElement(_router.Location, null, locationContext => _react.default.createElement(LocationHandler, locationContext));
|
|
|
|
const WrappedRoot = (0, _apiRunnerBrowser.apiRunner)(`wrapRootElement`, {
|
|
element: _react.default.createElement(Root, null)
|
|
}, _react.default.createElement(Root, null), ({
|
|
result
|
|
}) => {
|
|
return {
|
|
element: result
|
|
};
|
|
}).pop();
|
|
|
|
const NewRoot = () => WrappedRoot;
|
|
|
|
const renderer = (0, _apiRunnerBrowser.apiRunner)(`replaceHydrateFunction`, undefined, _reactDom.default.hydrate)[0];
|
|
(0, _domready.default)(() => {
|
|
renderer(_react.default.createElement(NewRoot, null), typeof window !== `undefined` ? document.getElementById(`___gatsby`) : void 0, () => {
|
|
(0, _apiRunnerBrowser.apiRunner)(`onInitialClientRender`);
|
|
});
|
|
});
|
|
});
|
|
}); |