Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/llms-txt-hub / apps/web/lib/routes.ts |
| Date | Not specified in source |
| Repository | Janady13/llms-txt-hub |
| Revision | e0f4bf978d4df168369c7601d9c5f5ea89e84377 |
| Branch | main |
| Path or archive member | apps/web/lib/routes.ts |
| Original SHA-256 | 3aff57d6d91b4b3f85de64a8a46f644eb9e9be15009d22ccfd7d08091d83966f |
| Git blob SHA | 688c53776097f6c58bff7688851cc8bd06ba2b0c |
| Reading-copy SHA-256 | 3aff57d6d91b4b3f85de64a8a46f644eb9e9be15009d22ccfd7d08091d83966f |
Recovered source transcript
Download complete source text ↓120 lines · 2.4 KB
/**
* Application route constants
* Use these constants instead of hardcoding routes in components
*/
export const routes = {
home: '/',
llmsTxt: '/llms.txt',
website: {
list: '/websites',
detail: '/websites/[slug]',
featured: '/websites',
latest: '/websites?sort=latest',
withCategory: '/websites?category=[category]'
},
category: {
page: '/[category]'
},
about: '/about',
favorites: '/favorites',
docs: {
list: '/docs',
doc: '/docs/[slug]'
},
guides: {
list: '/guides',
guide: '/guides/[slug]'
},
extension: {
whatsNew: '/extension/whats-new',
uninstall: '/extension/uninstall'
},
faq: '/faq',
login: '/login',
news: '/news',
privacy: '/privacy',
cookies: '/cookies',
projects: '/projects',
search: '/search',
submit: '/submit',
terms: '/terms',
rss: '/rss.xml',
members: {
list: '/members',
page: '/members/[page]'
},
profile: {
detail: '/u/[slug]'
}
} as const
type StaticRoutes =
| 'home'
| 'llmsTxt'
| 'website.list'
| 'website.featured'
| 'website.latest'
| 'about'
| 'docs.list'
| 'favorites'
| 'guides.list'
| 'extension.whatsNew'
| 'extension.uninstall'
| 'faq'
| 'login'
| 'news'
| 'privacy'
| 'cookies'
| 'projects'
| 'search'
| 'submit'
| 'terms'
| 'rss'
| 'members.list'
type DynamicRoutes =
| 'website.detail'
| 'website.withCategory'
| 'docs.doc'
| 'guides.guide'
| 'category.page'
| 'profile.detail'
| 'members.page'
type Routes = StaticRoutes | DynamicRoutes
type DynamicRouteParams = {
'website.detail': { slug: string }
'website.withCategory': { category: string }
'docs.doc': { slug: string }
'guides.guide': { slug: string }
'category.page': { category: string }
'profile.detail': { slug: string }
'members.page': { page: string }
}
/**
* Get the URL for a route
* @param route - Route name
* @param params - Route parameters (for dynamic routes)
*/
export function getRoute<T extends Routes>(
route: T,
params?: T extends keyof DynamicRouteParams ? DynamicRouteParams[T] : never
): string {
const parts = route.split('.')
let current: any = routes
for (const part of parts) {
current = current[part]
}
if (typeof current === 'string' && params) {
const param = Object.entries(params)[0]
return current.replace(`[${param[0]}]`, param[1])
}
return current
}