UNPKG

ibag

Version:

A visual, fast, and customizable front-end scaffolding.

162 lines (124 loc) 6.95 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); 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")); 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"); // Generated during bootstrap // 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 // Enable fast-refresh for virtual sync-requires and gatsby-browser module.hot.accept([`$virtual/async-requires`, `./api-runner-browser`]); 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; // 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(() => (0, _interopRequireWildcard2.default)(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(); }); } fetch(`/___services`).then(res => res.json()).then(services => { if (services.developstatusserver) { let isRestarting = false; const parentSocket = (0, _socket.default)(`${window.location.protocol}//${window.location.hostname}:${services.developstatusserver.port}`); parentSocket.on(`structured-log`, msg => { if (!isRestarting && msg.type === `LOG_ACTION` && msg.action.type === `DEVELOP` && msg.action.payload === `RESTART_REQUIRED` && window.confirm(`The develop process needs to be restarted for the changes to ${msg.action.dirtyFile} to be applied.\nDo you want to restart the develop process now?`)) { isRestarting = true; parentSocket.emit(`develop:restart`, () => { window.location.reload(); }); } if (isRestarting && msg.type === `LOG_ACTION` && msg.action.type === `SET_STATUS` && msg.action.payload === `SUCCESS`) { isRestarting = false; window.location.reload(); } }); // Prevents certain browsers spamming XHR 'ERR_CONNECTION_REFUSED' // errors within the console, such as when exiting the develop process. parentSocket.on(`disconnect`, () => { console.warn(`[socket.io] Disconnected. Unable to perform health-check.`); parentSocket.close(); }); } }); /** * 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 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 // render to avoid React complaining about hydration mis-matches. focusEl && focusEl.children.length > 0 ? _reactDom.default.hydrate : _reactDom.default.render)[0]; let dismissLoadingIndicator; if (process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND && process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`) { let indicatorMountElement; const showIndicatorTimeout = setTimeout(() => { indicatorMountElement = document.createElement(`first-render-loading-indicator`); document.body.append(indicatorMountElement); _reactDom.default.render( /*#__PURE__*/_react.default.createElement(_indicator.Indicator, null), indicatorMountElement); }, 1000); dismissLoadingIndicator = () => { clearTimeout(showIndicatorTimeout); if (indicatorMountElement) { _reactDom.default.unmountComponentAtNode(indicatorMountElement); indicatorMountElement.remove(); } }; } Promise.all([loader.loadPage(`/dev-404-page/`), loader.loadPage(`/404.html`), loader.loadPage(window.location.pathname)]).then(() => { (0, _navigation.init)(); (0, _domready.default)(() => { if (dismissLoadingIndicator) { dismissLoadingIndicator(); } renderer( /*#__PURE__*/_react.default.createElement(_root.default, null), rootElement, () => { (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); _reactDom.default.render( /*#__PURE__*/_react.default.createElement(_loadingIndicator.LoadingIndicatorEventHandler, null), indicatorMountElement); } }); }); }); });