UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

31 lines (30 loc) 1.69 kB
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 || ''}`; }