All files appRoutes.ts

100% Statements 39/39
100% Branches 10/10
100% Functions 5/5
100% Lines 39/39

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 401x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 88x 88x 88x 88x 88x 1x 1x 57x 57x 1x 1x 43x 43x 1x 1x 16x 16x 16x 16x 16x 16x 3x 3x 3x 16x  
// Segment boundaries keep public routes such as /dashboard-guide on the site.
const productRoots = [
  "/dashboard",
  "/onboarding",
  "/twitch",
  "/kick",
  "/staff",
  "/account",
  "/settings",
  "/billing",
  "/subscription",
]
const authRoots = ["/sign-in", "/sign-up", "/sso-callback", "/session-tasks"]
 
function matchesRoot(pathname: string, roots: string[]): boolean {
  return roots.some(
    (root) => pathname === root || pathname.startsWith(`${root}/`)
  )
}
 
export function isProtectedAppPath(pathname: string): boolean {
  return matchesRoot(pathname, productRoots)
}
 
export function isLegacyAppPath(pathname: string): boolean {
  return isProtectedAppPath(pathname) || matchesRoot(pathname, authRoots)
}
 
export function legacyAppRedirect(
  requestUrl: string,
  appOrigin: string
): URL | null {
  const request = new URL(requestUrl)
  if (!isLegacyAppPath(request.pathname)) return null
  const destination = new URL(appOrigin)
  destination.pathname = request.pathname
  destination.search = request.search
  return destination
}