f354f46b3f
This PR deprecates declaring a middleware under `pages` in favour of the project root naming it after `middleware` instead of `_middleware`. This is in the context of having a simpler execution model for middleware and also ships some refactor work. There is a ton of a code to be simplified after this deprecation but I think it is best to do it progressively. With this PR, when in development, we will **fail** whenever we find a nested middleware but we do **not** include it in the compiler so if the project is using it, it will no longer work. For production we will **fail** too so it will not be possible to build and deploy a deprecated middleware. The error points to a page that should also be reviewed as part of **documentation**. Aside from the deprecation, this migrates all middleware tests to work with a single middleware. It also splits tests into multiple folders to make them easier to isolate and work with. Finally it ships some small code refactor and simplifications.
31 lines
923 B
TypeScript
31 lines
923 B
TypeScript
import { normalizePathSep } from './normalize-path-sep'
|
|
|
|
/**
|
|
* Removes the file extension for a page and the trailing `index` if it exists
|
|
* making sure to not return an empty string. The page head is not touched
|
|
* and returned as it is passed. Examples:
|
|
* - `/foo/bar/baz/index.js` -> `/foo/bar/baz`
|
|
* - `/foo/bar/baz.js` -> `/foo/bar/baz`
|
|
*
|
|
* @param pagePath A page to a page file (absolute or relative)
|
|
* @param options.extensions Extensions allowed for the page.
|
|
* @param options.keepIndex When true the trailing `index` is _not_ removed.
|
|
*/
|
|
export function removePagePathTail(
|
|
pagePath: string,
|
|
options: {
|
|
extensions: string[]
|
|
keepIndex?: boolean
|
|
}
|
|
) {
|
|
pagePath = normalizePathSep(pagePath).replace(
|
|
new RegExp(`\\.+(?:${options.extensions.join('|')})$`),
|
|
''
|
|
)
|
|
|
|
if (options.keepIndex !== true) {
|
|
pagePath = pagePath.replace(/\/index$/, '') || '/'
|
|
}
|
|
|
|
return pagePath
|
|
}
|