b522b94cce
## Feature As the title, support `has` match, `local` that works the same with the `rewrites` and `redirects` of next.config.js on middleware config. With this PR, you can write the config like the following: ```js export const config = { matcher: [ "/foo", { source: "/bar" }, { source: "/baz", has: [ { type: 'header', key: 'x-my-header', value: 'my-value', } ] }, { source: "/en/asdf", locale: false, }, ] } ``` Also, fixes https://github.com/vercel/next.js/issues/39428 related https://github.com/vercel/edge-functions/issues/178, https://github.com/vercel/edge-functions/issues/179 - [x] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [x] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` Co-authored-by: JJ Kasper <jj@jjsweb.site>
41 lines
1 KiB
TypeScript
41 lines
1 KiB
TypeScript
import type { MiddlewareMatcher } from '../../analysis/get-page-static-info'
|
|
import { webpack } from 'next/dist/compiled/webpack/webpack'
|
|
|
|
/**
|
|
* A getter for module build info that casts to the type it should have.
|
|
* We also expose here types to make easier to use it.
|
|
*/
|
|
export function getModuleBuildInfo(webpackModule: webpack.Module) {
|
|
return webpackModule.buildInfo as {
|
|
nextEdgeMiddleware?: EdgeMiddlewareMeta
|
|
nextEdgeApiFunction?: EdgeMiddlewareMeta
|
|
nextEdgeSSR?: EdgeSSRMeta
|
|
nextUsedEnvVars?: Set<string>
|
|
nextWasmMiddlewareBinding?: AssetBinding
|
|
nextAssetMiddlewareBinding?: AssetBinding
|
|
usingIndirectEval?: boolean | Set<string>
|
|
route?: RouteMeta
|
|
importLocByPath?: Map<string, any>
|
|
}
|
|
}
|
|
|
|
export interface RouteMeta {
|
|
page: string
|
|
absolutePagePath: string
|
|
}
|
|
|
|
export interface EdgeMiddlewareMeta {
|
|
page: string
|
|
matchers?: MiddlewareMatcher[]
|
|
}
|
|
|
|
export interface EdgeSSRMeta {
|
|
isServerComponent: boolean
|
|
isAppDir?: boolean
|
|
page: string
|
|
}
|
|
|
|
export interface AssetBinding {
|
|
filePath: string
|
|
name: string
|
|
}
|