@@ -23,7 +23,9 @@ export type BuildRoutesArgs = {
2323} ;
2424
2525export type BuildAssetsArgs = {
26+ admin : AdminJS ;
2627 assets : ( typeof AdminRouter ) [ "assets" ] ;
28+ routes : ( typeof AdminRouter ) [ "routes" ] ;
2729 router : Router ;
2830} ;
2931
@@ -72,26 +74,50 @@ export const routeHandler =
7274 }
7375 } ;
7476
77+ export const buildRoute = ( {
78+ route,
79+ router,
80+ admin,
81+ } : {
82+ route : ( typeof AdminRouter ) [ "routes" ] [ number ] ;
83+ router : Router ;
84+ admin : AdminJS ;
85+ } ) => {
86+ // we have to change routes defined in AdminJS from {recordId} to :recordId
87+ const expressPath = convertToExpressRoute ( route . path ) ;
88+
89+ if ( route . method === "GET" ) {
90+ router . get ( expressPath , routeHandler ( { admin, route } ) ) ;
91+ }
92+
93+ if ( route . method === "POST" ) {
94+ router . post ( expressPath , routeHandler ( { admin, route } ) ) ;
95+ }
96+ } ;
97+
7598export const buildRoutes = ( {
7699 admin,
77100 routes,
78101 router,
79102} : BuildRoutesArgs ) : void => {
80- routes . forEach ( ( route ) => {
81- // we have to change routes defined in AdminJS from {recordId} to :recordId
82- const expressPath = convertToExpressRoute ( route . path ) ;
83-
84- if ( route . method === "GET" ) {
85- router . get ( expressPath , routeHandler ( { admin, route } ) ) ;
86- }
87-
88- if ( route . method === "POST" ) {
89- router . post ( expressPath , routeHandler ( { admin, route } ) ) ;
90- }
91- } ) ;
103+ routes . forEach ( ( route ) => buildRoute ( { route, router, admin } ) ) ;
92104} ;
93105
94- export const buildAssets = ( { assets, router } : BuildAssetsArgs ) : void => {
106+ export const buildAssets = ( {
107+ admin,
108+ assets,
109+ routes,
110+ router,
111+ } : BuildAssetsArgs ) : void => {
112+ // Note: We want components.bundle.js to be globally available. In production it is served as a .js asset, meanwhile
113+ // in local environments it's a route with "bundleComponents" action assigned.
114+ const componentBundlerRoute = routes . find (
115+ ( r ) => r . action === "bundleComponents"
116+ ) ;
117+ if ( componentBundlerRoute ) {
118+ buildRoute ( { route : componentBundlerRoute , router, admin } ) ;
119+ }
120+
95121 assets . forEach ( ( asset ) => {
96122 router . get ( asset . path , async ( _req , res ) => {
97123 res . sendFile ( path . resolve ( asset . src ) ) ;
@@ -111,8 +137,8 @@ export const buildRouter = (
111137 // todo fix types
112138 router . use ( formidableMiddleware ( formidableOptions ) as any ) ;
113139
140+ buildAssets ( { admin, assets, routes, router } ) ;
114141 buildRoutes ( { admin, routes, router } ) ;
115- buildAssets ( { assets, router } ) ;
116142
117143 return router ;
118144} ;
0 commit comments