middleware test
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import { routes, routeMatchers } from '../../../apps/website/lib/routing/RouteConfig';
|
||||
import type { RouteGroup } from '../../../apps/website/lib/routing/RouteConfig';
|
||||
|
||||
export type RouteAccess = 'public' | 'auth' | 'admin' | 'sponsor';
|
||||
export type RouteParams = Record<string, string>;
|
||||
@@ -33,35 +32,37 @@ export class WebsiteRouteManager {
|
||||
|
||||
public getWebsiteRouteInventory(): WebsiteRouteDefinition[] {
|
||||
const result: WebsiteRouteDefinition[] = [];
|
||||
|
||||
const processGroup = (group: keyof RouteGroup, groupRoutes: Record<string, string | ((id: string) => string)>) => {
|
||||
Object.values(groupRoutes).forEach((value) => {
|
||||
if (typeof value === 'function') {
|
||||
const template = value(WebsiteRouteManager.IDs.LEAGUE);
|
||||
result.push({
|
||||
pathTemplate: template,
|
||||
params: { id: WebsiteRouteManager.IDs.LEAGUE },
|
||||
access: group as RouteAccess,
|
||||
});
|
||||
} else {
|
||||
result.push({
|
||||
pathTemplate: value,
|
||||
access: group as RouteAccess,
|
||||
});
|
||||
}
|
||||
|
||||
const pushRoute = (pathTemplate: string, params?: RouteParams) => {
|
||||
result.push({
|
||||
pathTemplate,
|
||||
...(params ? { params } : {}),
|
||||
access: this.getAccessLevel(pathTemplate),
|
||||
});
|
||||
};
|
||||
|
||||
processGroup('auth', routes.auth);
|
||||
processGroup('public', routes.public);
|
||||
processGroup('protected', routes.protected);
|
||||
processGroup('sponsor', routes.sponsor);
|
||||
processGroup('admin', routes.admin);
|
||||
processGroup('league', routes.league);
|
||||
processGroup('race', routes.race);
|
||||
processGroup('team', routes.team);
|
||||
processGroup('driver', routes.driver);
|
||||
processGroup('error', routes.error);
|
||||
const processGroup = (groupRoutes: Record<string, string | ((id: string) => string)>) => {
|
||||
Object.values(groupRoutes).forEach((value) => {
|
||||
if (typeof value === 'function') {
|
||||
const template = value(WebsiteRouteManager.IDs.LEAGUE);
|
||||
pushRoute(template, { id: WebsiteRouteManager.IDs.LEAGUE });
|
||||
return;
|
||||
}
|
||||
|
||||
pushRoute(value);
|
||||
});
|
||||
};
|
||||
|
||||
processGroup(routes.auth);
|
||||
processGroup(routes.public);
|
||||
processGroup(routes.protected);
|
||||
processGroup(routes.sponsor);
|
||||
processGroup(routes.admin);
|
||||
processGroup(routes.league);
|
||||
processGroup(routes.race);
|
||||
processGroup(routes.team);
|
||||
processGroup(routes.driver);
|
||||
processGroup(routes.error);
|
||||
|
||||
return result.sort((a, b) => a.pathTemplate.localeCompare(b.pathTemplate));
|
||||
}
|
||||
@@ -87,9 +88,11 @@ export class WebsiteRouteManager {
|
||||
}
|
||||
|
||||
public getAccessLevel(pathTemplate: string): RouteAccess {
|
||||
if (routeMatchers.isInGroup(pathTemplate, 'public')) return 'public';
|
||||
// NOTE: `routeMatchers.isInGroup(path, 'public')` is prefix-based and will treat everything
|
||||
// as public because the home route is `/`. Use `isPublic()` for correct classification.
|
||||
if (routeMatchers.isInGroup(pathTemplate, 'admin')) return 'admin';
|
||||
if (routeMatchers.isInGroup(pathTemplate, 'sponsor')) return 'sponsor';
|
||||
if (routeMatchers.isPublic(pathTemplate)) return 'public';
|
||||
if (routeMatchers.requiresAuth(pathTemplate)) return 'auth';
|
||||
return 'public';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user