/* eslint-disable */ /* prettier-ignore */ // Generated by elegant-router // Read more: https://github.com/soybeanjs/elegant-router import type { RouteRecordRaw, RouteComponent } from 'vue-router'; import type { ElegantConstRoute } from '@elegant-router/vue'; import type { RouteMap, RouteKey, RoutePath } from '@elegant-router/types'; /** * transform elegant const routes to vue routes * @param routes elegant const routes * @param layouts layout components * @param views view components */ export function transformElegantRoutesToVueRoutes( routes: ElegantConstRoute[], layouts: Record Promise)>, views: Record Promise)> ) { return routes.flatMap(route => transformElegantRouteToVueRoute(route, layouts, views)); } /** * transform elegant route to vue route * @param route elegant const route * @param layouts layout components * @param views view components */ function transformElegantRouteToVueRoute( route: ElegantConstRoute, layouts: Record Promise)>, views: Record Promise)> ) { const LAYOUT_PREFIX = 'layout.'; const VIEW_PREFIX = 'view.'; const ROUTE_DEGREE_SPLITTER = '_'; const FIRST_LEVEL_ROUTE_COMPONENT_SPLIT = '$'; function isLayout(component: string) { return component.startsWith(LAYOUT_PREFIX); } function getLayoutName(component: string) { return component.replace(LAYOUT_PREFIX, ''); } function isView(component: string) { return component.startsWith(VIEW_PREFIX); } function getViewName(component: string) { return component.replace(VIEW_PREFIX, ''); } function isFirstLevelRoute(item: ElegantConstRoute) { return !item.name.includes(ROUTE_DEGREE_SPLITTER); } function isSingleLevelRoute(item: ElegantConstRoute) { return isFirstLevelRoute(item) && !item.children?.length; } function getSingleLevelRouteComponent(component: string) { const [layout, view] = component.split(FIRST_LEVEL_ROUTE_COMPONENT_SPLIT); return { layout: getLayoutName(layout), view: getViewName(view) }; } const vueRoutes: RouteRecordRaw[] = []; // add props: true to route if (route.path.includes(':') && !route.props) { route.props = true; } const { name, path, component, children, ...rest } = route; const vueRoute = { name, path, ...rest } as RouteRecordRaw; if (component) { if (isSingleLevelRoute(route)) { const { layout, view } = getSingleLevelRouteComponent(component); const singleLevelRoute: RouteRecordRaw = { path, component: layouts[layout], children: [ { name, path: '', component: views[view], ...rest } as RouteRecordRaw ] }; return [singleLevelRoute]; } if (isLayout(component)) { const layoutName = getLayoutName(component); vueRoute.component = layouts[layoutName]; } if (isView(component)) { const viewName = getViewName(component); vueRoute.component = views[viewName]; } } // add redirect to child if (children?.length && !vueRoute.redirect) { vueRoute.redirect = { name: children[0].name }; } if (children?.length) { const childRoutes = children.flatMap(child => transformElegantRouteToVueRoute(child, layouts, views)); if(isFirstLevelRoute(route)) { vueRoute.children = childRoutes; } else { vueRoutes.push(...childRoutes); } } vueRoutes.unshift(vueRoute); return vueRoutes; } /** * map of route name and route path */ const routeMap: RouteMap = { "root": "/", "not-found": "/:pathMatch(.*)*", "exception": "/exception", "exception_403": "/exception/403", "exception_404": "/exception/404", "exception_500": "/exception/500", "document": "/document", "document_project": "/document/project", "document_project-link": "/document/project-link", "document_vue": "/document/vue", "document_vite": "/document/vite", "document_unocss": "/document/unocss", "document_naive": "/document/naive", "document_antd": "/document/antd", "403": "/403", "404": "/404", "500": "/500", "about": "/about", "function": "/function", "function_hide-child": "/function/hide-child", "function_hide-child_one": "/function/hide-child/one", "function_hide-child_three": "/function/hide-child/three", "function_hide-child_two": "/function/hide-child/two", "function_multi-tab": "/function/multi-tab", "function_request": "/function/request", "function_super-page": "/function/super-page", "function_tab": "/function/tab", "function_toggle-auth": "/function/toggle-auth", "home": "/home", "iframe-page": "/iframe-page/:url", "login": "/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?", "manage": "/manage", "manage_menu": "/manage/menu", "manage_role": "/manage/role", "manage_user": "/manage/user", "manage_user-detail": "/manage/user-detail/:id", "multi-menu": "/multi-menu", "multi-menu_first": "/multi-menu/first", "multi-menu_first_child": "/multi-menu/first/child", "multi-menu_second": "/multi-menu/second", "multi-menu_second_child": "/multi-menu/second/child", "multi-menu_second_child_home": "/multi-menu/second/child/home", "user-center": "/user-center" }; /** * get route path by route name * @param name route name */ export function getRoutePath(name: T) { return routeMap[name]; } /** * get route name by route path * @param path route path */ export function getRouteName(path: RoutePath) { const routeEntries = Object.entries(routeMap) as [RouteKey, RoutePath][]; const routeName: RouteKey | null = routeEntries.find(([, routePath]) => routePath === path)?.[0] || null; return routeName; }