All files / lib paths.ts

0% Statements 0/7
0% Branches 0/7
0% Functions 0/3
0% Lines 0/5

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                                                                       
import type { Pathname, RouteId, RouteParams } from '$app/types';
 
import * as navigation from '$app/navigation';
import { resolve } from '$app/paths';
import { page } from '$app/state';
 
type ResolveArgs<T extends RouteId | Pathname> = T extends RouteId
	? RouteParams<T> extends Record<string, never>
		? [route: T]
		: [route: T, params: RouteParams<T>]
	: [route: T];
 
export async function goto<T extends RouteId | Pathname>(...args: ResolveArgs<T>) {
	await navigation.goto(resolve(...args));
}
 
// TODO: remove at some point
export { resolve };
 
/**
 * Checks if the given (or current) route is within the specified route (so a prefix check)
 * @param baseRouteId prefix to check for
 * @param routeId route id to check, defaults to the current route
 */
export function routeIsIn(baseRouteId: RouteId, routeId: RouteId | null = page.route.id) {
	if (!routeId) return false;
	return routeId.startsWith(baseRouteId);
}
 
export function switchRouteId<Cases extends Partial<Record<RouteId, unknown>> & { else: unknown }>(
	cases: Cases
): Cases[keyof Cases] {
	if (!page.route.id) return cases.else;
	return cases[page.route.id] ?? cases.else;
}