Skip to content

Commit ec66e26

Browse files
authored
feat: add plugin handle404 middleware (#420)
1 parent 410314a commit ec66e26

File tree

5 files changed

+35
-1
lines changed

5 files changed

+35
-1
lines changed

.changeset/dry-pans-buy.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@blinkk/root': patch
3+
---
4+
5+
feat: add plugin handle404 middleware

packages/root/src/cli/dev.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,15 @@ export async function createDevServer(options?: {
119119

120120
// Add the root.js dev server middlewares.
121121
server.use(rootDevServerMiddleware());
122+
123+
// Add any custom plugin 404 handlers.
124+
plugins.forEach((plugin) => {
125+
if (plugin.handle404) {
126+
server.use(plugin.handle404);
127+
}
128+
});
129+
130+
// Add error handlers.
122131
server.use(rootDevServer404Middleware());
123132
server.use(rootDevServer500Middleware());
124133
},

packages/root/src/cli/preview.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,13 @@ export async function createPreviewServer(options: {
106106
// Add the root.js preview server middlewares.
107107
server.use(rootPreviewServerMiddleware());
108108

109+
// Add any custom plugin 404 handlers.
110+
plugins.forEach((plugin) => {
111+
if (plugin.handle404) {
112+
server.use(plugin.handle404);
113+
}
114+
});
115+
109116
// Add error handlers.
110117
server.use(rootPreviewServer404Middleware());
111118
server.use(rootPreviewServer500Middleware());

packages/root/src/cli/start.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ export async function createProdServer(options: {
101101
// Add the root.js preview server middlewares.
102102
server.use(rootProdServerMiddleware());
103103

104+
// Add any custom plugin 404 handlers.
105+
plugins.forEach((plugin) => {
106+
if (plugin.handle404) {
107+
server.use(plugin.handle404);
108+
}
109+
});
110+
104111
// Add error handlers.
105112
server.use(rootProdServer404Middleware());
106113
server.use(rootProdServer500Middleware());

packages/root/src/core/plugin.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {ViteDevServer, PluginOption as VitePlugin} from 'vite';
22
import {RootConfig} from './config.js';
3-
import {Server} from './types.js';
3+
import {NextFunction, Request, Response, Server} from './types.js';
44

55
type MaybePromise<T> = T | Promise<T>;
66

@@ -55,6 +55,12 @@ export interface Plugin {
5555
vitePlugins?: VitePlugin[];
5656
/** Plugin lifecycle callback hooks. */
5757
hooks?: PluginHooks;
58+
/** Custom 404 handler. */
59+
handle404?: (
60+
req: Request,
61+
res: Response,
62+
next: NextFunction
63+
) => void | Promise<void>;
5864
}
5965

6066
/**

0 commit comments

Comments
 (0)