UNPKG

2.1 kBJavaScriptView Raw
1import React from "react"
2import ReactDOM from "react-dom"
3import domReady from "@mikaelkristiansson/domready"
4
5import socketIo from "./socketIo"
6import emitter from "./emitter"
7import { apiRunner, apiRunnerAsync } from "./api-runner-browser"
8import { setLoader, publicLoader } from "./loader"
9import DevLoader from "./dev-loader"
10import syncRequires from "./sync-requires"
11// Generated during bootstrap
12import matchPaths from "./match-paths.json"
13
14window.___emitter = emitter
15
16const loader = new DevLoader(syncRequires, matchPaths)
17setLoader(loader)
18loader.setApiRunner(apiRunner)
19
20window.___loader = publicLoader
21
22// Let the site/plugins run code very early.
23apiRunnerAsync(`onClientEntry`).then(() => {
24 // Hook up the client to socket.io on server
25 const socket = socketIo()
26 if (socket) {
27 socket.on(`reload`, () => {
28 window.location.reload()
29 })
30 }
31
32 /**
33 * Service Workers are persistent by nature. They stick around,
34 * serving a cached version of the site if they aren't removed.
35 * This is especially frustrating when you need to test the
36 * production build on your local machine.
37 *
38 * Let's warn if we find service workers in development.
39 */
40 if (`serviceWorker` in navigator) {
41 navigator.serviceWorker.getRegistrations().then(registrations => {
42 if (registrations.length > 0)
43 console.warn(
44 `Warning: found one or more service workers present.`,
45 `If your site isn't behaving as expected, you might want to remove these.`,
46 registrations
47 )
48 })
49 }
50
51 const rootElement = document.getElementById(`___gatsby`)
52
53 const renderer = apiRunner(
54 `replaceHydrateFunction`,
55 undefined,
56 ReactDOM.render
57 )[0]
58
59 Promise.all([
60 loader.loadPage(`/dev-404-page/`),
61 loader.loadPage(`/404.html`),
62 loader.loadPage(window.location.pathname),
63 ]).then(() => {
64 const preferDefault = m => (m && m.default) || m
65 let Root = preferDefault(require(`./root`))
66 domReady(() => {
67 renderer(<Root />, rootElement, () => {
68 apiRunner(`onInitialClientRender`)
69 })
70 })
71 })
72})
73
\No newline at end of file