1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/server/build/loaders/hot-self-accept-loader.js

39 lines
1.1 KiB
JavaScript
Raw Normal View History

2016-10-17 14:35:31 +00:00
import { resolve, relative } from 'path'
2016-10-14 15:05:08 +00:00
module.exports = function (content, sourceMap) {
2016-10-14 15:05:08 +00:00
this.cacheable()
2016-10-17 14:35:31 +00:00
const route = getRoute(this)
this.callback(null, `${content}
2016-10-14 15:05:08 +00:00
if (module.hot) {
module.hot.accept()
var Component = module.exports.default || module.exports
Component.__route = ${JSON.stringify(route)}
2016-10-19 12:41:45 +00:00
if (module.hot.status() !== 'idle') {
var components = next.router.components
for (var r in components) {
if (!components.hasOwnProperty(r)) continue
if (components[r].Component.__route === ${JSON.stringify(route)}) {
next.router.update(r, Component)
}
}
2016-10-14 15:05:08 +00:00
}
}
`, sourceMap)
2016-10-14 15:05:08 +00:00
}
2016-10-17 14:35:31 +00:00
const nextPagesDir = resolve(__dirname, '..', '..', '..', 'pages')
2016-10-17 14:35:31 +00:00
function getRoute (loaderContext) {
const pagesDir = resolve(loaderContext.options.context, 'pages')
const { resourcePath } = loaderContext
const dir = [pagesDir, nextPagesDir]
.find((d) => resourcePath.indexOf(d) === 0)
const path = relative(dir, resourcePath)
return '/' + path.replace(/((^|\/)index)?\.js$/, '')
2016-10-17 14:35:31 +00:00
}