Skip to content

Commit 48248e2

Browse files
committed
fix: serve custom components bundle publicly
1 parent 64c6611 commit 48248e2

File tree

2 files changed

+41
-15
lines changed

2 files changed

+41
-15
lines changed

src/buildAuthenticatedRouter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export const buildAuthenticatedRouter = (
7777

7878
withLogin(router, admin, auth);
7979
withLogout(router, admin);
80-
buildAssets({ assets, router });
80+
buildAssets({ admin, assets, routes, router });
8181

8282
withProtectedRoutesHandler(router, admin);
8383
buildRoutes({ admin, routes, router });

src/buildRouter.ts

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ export type BuildRoutesArgs = {
2323
};
2424

2525
export 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+
7598
export 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

Comments
 (0)