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.
26 lines
708 B
TypeScript
26 lines
708 B
TypeScript
import { join } from 'path'
|
|
import { nonNullable } from './non-nullable'
|
|
import { promises } from 'fs'
|
|
|
|
export async function flatReaddir(dir: string, include: RegExp) {
|
|
const dirents = await promises.readdir(dir, { withFileTypes: true })
|
|
const result = await Promise.all(
|
|
dirents.map(async (part) => {
|
|
const absolutePath = join(dir, part.name)
|
|
if (part.isSymbolicLink()) {
|
|
const stats = await promises.stat(absolutePath)
|
|
if (stats.isDirectory()) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
if (part.isDirectory() || !include.test(part.name)) {
|
|
return null
|
|
}
|
|
|
|
return absolutePath.replace(dir, '')
|
|
})
|
|
)
|
|
|
|
return result.filter(nonNullable)
|
|
}
|