/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { getDefaultRoute } from "./utils"; import { ROUTE_PATHS } from "./constants"; /** * Global navigation guard for handling root path redirects */ export function createRootGuard(routes: any[]) { return function rootGuard(to: any, from: any, next: any) { if (to.path === ROUTE_PATHS.ROOT) { const defaultPath = getDefaultRoute(routes); next({ path: defaultPath }); } else { next(); } }; } /** * Authentication guard (placeholder for future implementation) */ export function createAuthGuard() { return function authGuard(to: any, from: any, next: any) { // TODO: Implement authentication logic // const token = window.localStorage.getItem("skywalking-authority"); // if (to.meta?.requiresAuth && !token) { // next('/login'); // return; // } next(); }; } /** * Route validation guard */ export function createValidationGuard() { return function validationGuard(to: any, from: any, next: any) { // Validate route parameters if needed if (to.params && Object.keys(to.params).length > 0) { // Add custom validation logic here const hasValidParams = Object.values(to.params).every((param) => param !== undefined); if (!hasValidParams) { next({ name: "NotFound" }); return; } } next(); }; } /** * Error handling guard */ export function createErrorGuard() { return function errorGuard(error: any) { console.error("Router error:", error); // Handle specific error types if (error.name === "NavigationDuplicated") { // Ignore duplicate navigation errors return; } // Redirect to error page or handle other errors throw error; }; } /** * Apply all navigation guards */ export function applyGuards(router: any, routes: any[]) { router.beforeEach(createRootGuard(routes)); router.beforeEach(createAuthGuard()); router.beforeEach(createValidationGuard()); router.onError(createErrorGuard()); }