UNPKG

gatsby

Version:
157 lines (151 loc) • 8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.notCalledFunction = notCalledFunction; require("@gatsbyjs/webpack-hot-middleware/client"); var _react = _interopRequireDefault(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); var _socketIo = _interopRequireDefault(require("./socketIo")); var _emitter = _interopRequireDefault(require("./emitter")); var _apiRunnerBrowser = require("./api-runner-browser"); var _loader = require("./loader"); var _indicator = require("./loading-indicator/indicator"); var _devLoader = _interopRequireDefault(require("./dev-loader")); var _asyncRequires = _interopRequireDefault(require("$virtual/async-requires")); var _matchPaths = _interopRequireDefault(require("$virtual/match-paths.json")); var _loadingIndicator = require("./loading-indicator"); 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 <Root /> 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(_asyncRequires.default, _matchPaths.default); (0, _loader.setLoader)(loader); loader.setApiRunner(_apiRunnerBrowser.apiRunner); window.___loader = _loader.publicLoader; const reactDomClient = require(`react-dom/client`); const reactFirstRenderOrHydrate = (Component, el) => { // we will use hydrate if mount element has any content inside const useHydrate = el && el.children.length; if (useHydrate) { const root = reactDomClient.hydrateRoot(el, Component); return () => root.unmount(); } else { const root = reactDomClient.createRoot(el); root.render(Component); return () => root.unmount(); } }; // Do dummy dynamic import so the jsonp __webpack_require__.e is added to the commons.js // bundle. This ensures hot reloading doesn't break when someone first adds // a dynamic import. // // Without this, the runtime breaks with a // "TypeError: __webpack_require__.e is not a function" // error. function notCalledFunction() { return Promise.resolve().then(() => _interopRequireWildcard(require(`./dummy`))); } // Let the site/plugins run code very early. (0, _apiRunnerBrowser.apiRunnerAsync)(`onClientEntry`).then(() => { // Hook up the client to socket.io on server const socket = (0, _socketIo.default)(); if (socket) { socket.on(`reload`, () => { window.location.reload(); }); } /** * Service Workers are persistent by nature. They stick around, * serving a cached version of the site if they aren't removed. * This is especially frustrating when you need to test the * production build on your local machine. * * Let's warn if we find service workers in development. */ if (`serviceWorker` in navigator) { navigator.serviceWorker.getRegistrations().then(registrations => { if (registrations.length > 0) console.warn(`Warning: found one or more service workers present.`, `If your site isn't behaving as expected, you might want to remove these.`, registrations); }); } const rootElement = document.getElementById(`___gatsby`); const renderer = (0, _apiRunnerBrowser.apiRunner)(`replaceHydrateFunction`, undefined, reactFirstRenderOrHydrate)[0]; let dismissLoadingIndicator; if (process.env.GATSBY_QUERY_ON_DEMAND && process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`) { let indicatorMountElement; let cleanupFn; const showIndicatorTimeout = setTimeout(() => { indicatorMountElement = document.createElement(`first-render-loading-indicator`); document.body.append(indicatorMountElement); cleanupFn = renderer( /*#__PURE__*/_react.default.createElement(_indicator.Indicator, null), indicatorMountElement); }, 1000); dismissLoadingIndicator = () => { clearTimeout(showIndicatorTimeout); if (indicatorMountElement) { // If user defined replaceHydrateFunction themselves the cleanupFn return might not be there // So fallback to unmountComponentAtNode for now if (cleanupFn && typeof cleanupFn === `function`) { cleanupFn(); } else { _reactDom.default.unmountComponentAtNode(indicatorMountElement); } indicatorMountElement.remove(); } }; } Promise.all([loader.loadPage(`/dev-404-page/`), loader.loadPage(`/404.html`), loader.loadPage(window.location.pathname + window.location.search)]).then(() => { (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); renderer( /*#__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); } function runRender() { if (dismissLoadingIndicator) { dismissLoadingIndicator(); } 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); } }); }); //# sourceMappingURL=app.js.map