@@ -23,7 +23,9 @@ export type BuildRoutesArgs = {
23
23
} ;
24
24
25
25
export type BuildAssetsArgs = {
26
+ admin : AdminJS ;
26
27
assets : ( typeof AdminRouter ) [ "assets" ] ;
28
+ routes : ( typeof AdminRouter ) [ "routes" ] ;
27
29
router : Router ;
28
30
} ;
29
31
@@ -72,26 +74,50 @@ export const routeHandler =
72
74
}
73
75
} ;
74
76
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
+
75
98
export const buildRoutes = ( {
76
99
admin,
77
100
routes,
78
101
router,
79
102
} : 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 } ) ) ;
92
104
} ;
93
105
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
+
95
121
assets . forEach ( ( asset ) => {
96
122
router . get ( asset . path , async ( _req , res ) => {
97
123
res . sendFile ( path . resolve ( asset . src ) ) ;
@@ -111,8 +137,8 @@ export const buildRouter = (
111
137
// todo fix types
112
138
router . use ( formidableMiddleware ( formidableOptions ) as any ) ;
113
139
140
+ buildAssets ( { admin, assets, routes, router } ) ;
114
141
buildRoutes ( { admin, routes, router } ) ;
115
- buildAssets ( { assets, router } ) ;
116
142
117
143
return router ;
118
144
} ;
0 commit comments