29 lines
997 B
TypeScript
29 lines
997 B
TypeScript
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 };
|
|
}
|