2024-07-23 19:13:18 +02:00
|
|
|
import type { RouteNode } from './types'
|
|
|
|
|
import { multiSortBy } from './utils'
|
|
|
|
|
import { ROOT_PATH_ID } from './constants'
|
|
|
|
|
|
|
|
|
|
// Routes need to be sorted in order to iterate over the handleNode fn
|
|
|
|
|
// with first the items that might be parent routes
|
2024-12-07 11:58:58 +01:00
|
|
|
export const sortRouteNodes = (routes: Array<RouteNode>): Array<RouteNode> =>
|
2024-07-23 19:13:18 +02:00
|
|
|
multiSortBy(routes, [
|
|
|
|
|
(d): number => (d.routePath === '/' ? -1 : 1),
|
|
|
|
|
(d): number => d.routePath.split('/').length,
|
|
|
|
|
// Dynamic route
|
|
|
|
|
(d): number => (d.routePath.endsWith(']') ? 1 : -1),
|
|
|
|
|
(d): number => (d.filePath.match(/[./]index[.]/) ? 1 : -1),
|
|
|
|
|
(d): number => (d.filePath.match(/[./]route[.]/) ? -1 : 1),
|
|
|
|
|
(d): number => (d.routePath.endsWith('/') ? -1 : 1),
|
|
|
|
|
(d): string => d.routePath,
|
|
|
|
|
]).filter((d) => ![`/${ROOT_PATH_ID}`].includes(d.routePath || ''))
|