2023-06-04 16:59:38 +02:00
import path from 'path' ;
import fs from 'fs' ;
2024-06-28 11:24:37 +02:00
import { getIconMetaData } from '@lucide/build-icons' ;
import { getCurrentDirPath } from '@lucide/helpers' ;
2023-06-04 16:59:38 +02:00
const currentDir = process . cwd ( ) ;
2024-03-08 15:20:15 +01:00
const scriptDir = getCurrentDirPath ( import . meta . url ) ;
2025-02-06 15:39:07 +01:00
const iconMetaData = await getIconMetaData ( path . resolve ( scriptDir , '../../icons' ) ) ;
2024-03-08 15:20:15 +01:00
const iconAliasesRedirectRoutes = Object . entries ( iconMetaData )
. filter ( ( [ , { aliases } ] ) = > aliases ? . length )
. map ( ( [ iconName , { aliases } ] ) = > {
2026-06-13 15:25:41 +02:00
const aliasRouteMatches = aliases . map ( ( alias ) = > typeof alias === 'string' ? alias : alias?.name ) . join ( '|' ) ;
2024-03-08 15:20:15 +01:00
return {
2026-03-06 10:45:21 +01:00
src : ` ^/icons/( ${ aliasRouteMatches } ) $ ` ,
status : 308 ,
2024-03-08 15:20:15 +01:00
headers : {
Location : ` /icons/ ${ iconName } ` ,
} ,
} ;
} ) ;
2023-06-04 16:59:38 +02:00
2026-03-05 14:03:27 +01:00
const vercelOutputJSON = path . resolve ( currentDir , '.vercel/output/config.json' ) ;
2023-06-04 16:59:38 +02:00
2026-03-05 14:03:27 +01:00
const vercelConfig = await fs . promises . readFile ( vercelOutputJSON , 'utf-8' ) ;
2023-06-04 16:59:38 +02:00
2026-03-05 14:03:27 +01:00
const vercelRouteConfig = JSON . parse ( vercelConfig ) ;
vercelRouteConfig . routes = [ . . . iconAliasesRedirectRoutes , . . . vercelRouteConfig . routes ] ;
// Adjust the existing catch-all route to only catch API routes, so that we can add a new catch-all route for 404s
const allCatchRoute = '/(.*)' ;
const fallBackIndex = vercelRouteConfig . routes . findIndex ( ( route ) = > route . src === allCatchRoute ) ;
if ( fallBackIndex === - 1 ) {
throw new Error (
` Could not find the expected catch-all route with src " ${ allCatchRoute } " in the existing Vercel config. Please make sure that the existing config has a catch-all route and that its src is " ${ allCatchRoute } ". ` ,
) ;
}
vercelRouteConfig . routes [ fallBackIndex ] . src = '/api/(.*)' ;
vercelRouteConfig . routes . push ( {
src : allCatchRoute ,
dest : '/404.html' ,
} ) ;
const output = JSON . stringify ( vercelRouteConfig , null , 2 ) ;
2023-06-04 16:59:38 +02:00
2025-02-10 14:13:52 +01:00
await fs . promises . writeFile ( vercelOutputJSON , output , 'utf-8' ) ;