import { ensureLeadingSlash } from "../../page-path/ensure-leading-slash"; import { isGroupSegment } from "../../segment"; /** * Normalizes an app route so it represents the actual request path. Essentially * performing the following transformations: * * - `/(dashboard)/user/[id]/page` to `/user/[id]` * - `/(dashboard)/account/page` to `/account` * - `/user/[id]/page` to `/user/[id]` * - `/account/page` to `/account` * - `/page` to `/` * - `/(dashboard)/user/[id]/route` to `/user/[id]` * - `/(dashboard)/account/route` to `/account` * - `/user/[id]/route` to `/user/[id]` * - `/account/route` to `/account` * - `/route` to `/` * - `/` to `/` * * @param route the app route to normalize * @returns the normalized pathname */ export function normalizeAppPath(route) { return ensureLeadingSlash(route.split("/").reduce((pathname, segment, index, segments)=>{ // Empty segments are ignored. if (!segment) { return pathname; } // Groups are ignored. if (isGroupSegment(segment)) { return pathname; } // Parallel segments are ignored. if (segment[0] === "@") { return pathname; } // The last segment (if it's a leaf) should be ignored. if ((segment === "page" || segment === "route") && index === segments.length - 1) { return pathname; } return pathname + "/" + segment; }, "")); } /** * Strips the `.rsc` extension if it's in the pathname. * Since this function is used on full urls it checks `?` for searchParams handling. */ export function normalizeRscPath(pathname, enabled) { return enabled ? pathname.replace(/\.rsc($|\?)/, // $1 ensures `?` is preserved "$1") : pathname; } //# sourceMappingURL=app-paths.js.map