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' );
const vercelConfig = await fs . promises . readFile ( vercelOutputJSON , 'utf-8' );
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' ,
});
2023-06-04 16:59:38 +02:00
const output = JSON . stringify ( vercelRouteConfig , null , 2 );
2025-02-10 14:13:52 +01:00
await fs . promises . writeFile ( vercelOutputJSON , output , 'utf-8' );