import { ChildRouteMap } from '../routeFn'; import { AnyOptionsRouteNode, AnyRouteNode } from '../routeNode'; import { RouterType } from '../router'; import { RouteOptions } from '../types'; export function optionsRouterToRouteList( router: RouterType ): AnyOptionsRouteNode[] { return flattenRouteList( Object.entries>(router) .filter(val => val[0] !== 'defaultOptions') .map(val => val[1]) ); } export function anyRouterToRouteList( router: RouterType ): AnyRouteNode[] { return Object.entries(router) .filter(val => val[0] !== 'defaultOptions') .map(val => val[1]); } function flattenRouteMap( routeMap: ChildRouteMap ): AnyOptionsRouteNode[] { return Object.entries(routeMap).flatMap>(val => { if ( typeof val[1].children === 'object' && Object.entries(val[1].children).length > 0 ) { return [val[1], ...flattenRouteMap(val[1].children)]; } return [val[1]]; }); } function flattenRouteList( routes: AnyOptionsRouteNode[] ): AnyOptionsRouteNode[] { return routes.flatMap>(val => { if ( typeof val.children === 'object' && Object.entries(val.children).length > 0 ) { return [val, ...flattenRouteMap(val.children)]; } return [val]; }); }