All files / src/shared/lib navigation.ts

100% Statements 10/10
100% Branches 14/14
100% Functions 3/3
100% Lines 10/10

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      4x           3x   1x           1x   4x 4x           1x 1x   3x 3x    
import type { RouteLocationRaw, Router } from "vue-router";
 
export function safeReturnTo(value: unknown, fallback = "/account"): string {
  if (
    typeof value !== "string"
    || !value.startsWith("/")
    || value.startsWith("//")
    || value.includes("\\")
  ) {
    return fallback;
  }
  return value;
}
 
export async function returnToPreviousOr(
  router: Router,
  fallback: RouteLocationRaw,
  allowPrevious: (path: string) => boolean = () => true,
): Promise<"history" | "fallback"> {
  const back = router.options.history.state.back;
  if (
    typeof back === "string"
    && back.startsWith("/")
    && !back.startsWith("//")
    && allowPrevious(back)
  ) {
    router.back();
    return "history";
  }
  await router.replace(fallback);
  return "fallback";
}