[gatsby-plugin-vercel-builder] Fix nested SSR routes (#10751)

Fixes SSR / DSG pages that are nested deeper than the root path for Gatsby projects.

Also introduces unit tests for the logic related to determining which page name to use.
This commit is contained in:
Nathan Rajlich
2023-10-24 13:15:46 -07:00
committed by GitHub
parent a732b64c02
commit efd3cc05dc
14 changed files with 175 additions and 26 deletions

View File

@@ -0,0 +1,29 @@
import { parse } from 'url';
import { basename, dirname } from 'path';
export function getPageName(url: string, pathPrefix = '') {
let pathName = (parse(url).pathname || '/').slice(pathPrefix.length);
const isPageData = pathName.startsWith('/page-data/');
if (isPageData) {
// "/page-data/index/page-data.json" -> "/"
// "/page-data/using-ssr/page-data.json" -> "using-ssr"
// "/page-data/foo/bar/ssr/page-data.json" -> "foo/bar/ssr"
pathName = pathName.split('/').slice(2, -1).join('/');
if (pathName === 'index') {
pathName = '/';
}
} else {
// "/using-ssr" -> "using-ssr"
// "/using-ssr/" -> "using-ssr"
// "/using-ssr/index.html" -> "using-ssr"
// "/foo/bar/ssr" -> "foo/bar/ssr"
if (basename(pathName) === 'index.html') {
pathName = dirname(pathName);
}
if (pathName !== '/') {
// Remove leading and trailing "/"
pathName = pathName.replace(/(^\/|\/$)/g, '');
}
}
return { isPageData, pathName };
}