rsnext/packages/next/build/webpack/loaders/next-middleware-loader.ts

34 lines
883 B
TypeScript
Raw Normal View History

import loaderUtils from 'next/dist/compiled/loader-utils'
export type MiddlewareLoaderOptions = {
absolutePagePath: string
page: string
}
export default function middlewareLoader(this: any) {
const { absolutePagePath, page }: MiddlewareLoaderOptions =
loaderUtils.getOptions(this)
const stringifiedPagePath = loaderUtils.stringifyRequest(
this,
absolutePagePath
)
return `
import { adapter } from 'next/dist/server/web/adapter'
var mod = require(${stringifiedPagePath})
var handler = mod.middleware || mod.default;
if (typeof handler !== 'function') {
throw new Error('The Middleware "pages${page}" must export a \`middleware\` or a \`default\` function');
}
export default function (opts) {
return adapter({
...opts,
handler
})
}
`
}