one
Version:
One is a React framework for web, iOS, and Android apps.
24 lines (22 loc) • 951 B
text/typescript
import { getPathnameFromFilePath } from '../../utils/getPathnameFromFilePath'
import type { RouteInfo } from '../../vite/types'
// the path of a route's function folder and of the rewrites that point at it. vercel
// reads no param syntax from the folder (config.json rewrites do the matching), so
// params stay as written ([id], [...slug]): windows can't create `:` or `*` in a path
export function getPathFromRoute(
route: RouteInfo<string>,
options: { includeIndex?: boolean } = {}
) {
const params: Record<string, string> = {}
for (const [param, inner] of route.file.matchAll(/\[([^\]]+)\]/g)) {
// getPathnameFromFilePath looks up a catch-all as ...slug in dirnames, slug in file names
params[inner] = param
params[inner.replace(/^\.\.\./, '')] = param
}
return getPathnameFromFilePath(route.file, params, false, {
...options,
preserveExtensions: true,
})
.replace(/^\.\//, '/')
.replace(/\/+$/, '')
}