vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
31 lines (30 loc) • 1.69 kB
JavaScript
export { handlePageContextRequestUrl };
import { pageContextJsonFileExtension, doNotCreateExtraDirectory } from '../../../shared/getPageContextRequestUrl.js';
import { baseServer, parseUrl, assert, slice } from '../utils.js';
// See also shared/getPageContextRequestUrl.ts
function handlePageContextRequestUrl(url) {
if (!hasSuffix(url)) {
return { urlWithoutPageContextRequestSuffix: url, isPageContextRequest: false };
}
return { urlWithoutPageContextRequestSuffix: removePageContextUrlSuffix(url), isPageContextRequest: true };
}
function hasSuffix(url) {
const { pathnameOriginal, pathname } = parseUrl(url, baseServer);
assert(pathnameOriginal.endsWith(pageContextJsonFileExtension) === pathname.endsWith(pageContextJsonFileExtension), {
url,
});
return pathnameOriginal.endsWith(pageContextJsonFileExtension);
}
function removePageContextUrlSuffix(url) {
const urlParsed = parseUrl(url, baseServer);
// We cannot use `urlParsed.pathname` because it would break the `urlParsed.pathnameOriginal` value of subsequent `parseUrl()` calls.
const { origin, pathnameOriginal, searchOriginal, hashOriginal } = urlParsed;
assert(doNotCreateExtraDirectory === false);
const urlSuffix = `/index${pageContextJsonFileExtension}`;
assert(pathnameOriginal.endsWith(urlSuffix), { url });
let pathnameModified = slice(pathnameOriginal, 0, -1 * urlSuffix.length);
if (pathnameModified === '')
pathnameModified = '/';
assert(url === `${origin || ''}${pathnameOriginal}${searchOriginal || ''}${hashOriginal || ''}`, { url });
return `${origin || ''}${pathnameModified}${searchOriginal || ''}${hashOriginal || ''}`;
}