rsnext/packages/next/client/amp-dev.js
Joe Haddad cc2b7bc8fa
Setup on-demand-entries ping to prevent AMP page disposal (#6484)
* refactor(on-demand-entries): extract method: setupPing

* Setup ping for amp pages

* Missed a call
2019-02-28 12:52:13 -05:00

41 lines
1.1 KiB
JavaScript

/* globals __webpack_hash__ */
import EventSourcePolyfill from './event-source-polyfill'
import { getEventSourceWrapper } from './dev-error-overlay/eventsource'
import { setupPing } from './on-demand-entries-utils'
if (!window.EventSource) {
window.EventSource = EventSourcePolyfill
}
const data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent)
let { assetPrefix, page } = data
assetPrefix = assetPrefix || ''
getEventSourceWrapper({
path: `${assetPrefix}/_next/webpack-hmr`
}).addMessageListener(event => {
if (event.data === '\uD83D\uDC93') {
return
}
try {
const message = JSON.parse(event.data)
if (message.action === 'sync' || message.action === 'built') {
if (!message.hash) {
return
}
/* eslint-disable-next-line camelcase */
if (message.hash !== __webpack_hash__) {
document.location.reload(true)
}
} else if (message.action === 'reloadPage') {
document.location.reload(true)
}
} catch (ex) {
console.warn('Invalid HMR message: ' + event.data + '\n' + ex)
}
})
setupPing(assetPrefix, () => page)