rsnext/packages/next/build/webpack/loaders/next-client-pages-loader.ts
JJ Kasper 5a0dcbc95b Update pages-loader to return one value (#8629)
* Update pages-loader to return one value

* de-dupe page mod update also
2019-09-11 13:21:10 -04:00

29 lines
933 B
TypeScript

import { loader } from 'webpack'
import loaderUtils from 'loader-utils'
export type ClientPagesLoaderOptions = {
absolutePagePath: string
page: string
}
const nextClientPagesLoader: loader.Loader = function() {
const { absolutePagePath, page }: any = loaderUtils.getOptions(this)
const stringifiedAbsolutePagePath = JSON.stringify(absolutePagePath)
const stringifiedPage = JSON.stringify(page)
return `
(window.__NEXT_P=window.__NEXT_P||[]).push([${stringifiedPage}, function() {
var mod = require(${stringifiedAbsolutePagePath})
if(module.hot) {
module.hot.accept(${stringifiedAbsolutePagePath}, function() {
if(!next.router.components[${stringifiedPage}]) return
var updatedPage = require(${stringifiedAbsolutePagePath})
next.router.update(${stringifiedPage}, updatedPage)
})
}
return mod
}]);
`
}
export default nextClientPagesLoader