Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 571814d

Browse files
authoredJan 8, 2025··
fix(dev): proper not found handling (#1136)
close #1135
1 parent 8dc1533 commit 571814d

File tree

4 files changed

+26
-28
lines changed

4 files changed

+26
-28
lines changed
 

‎e2e/fixtures/define-router/src/entries.tsx

+1-14
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type { ReactNode } from 'react';
22
import { unstable_defineRouter as defineRouter } from 'waku/router/server';
33
import { Slot, Children } from 'waku/minimal/client';
4-
import { unstable_defineEntries as defineEntries } from 'waku/minimal/server';
54

65
import Layout from './routes/layout.js';
76
import Page from './routes/page.js';
@@ -62,16 +61,4 @@ const router: ReturnType<typeof defineRouter> = defineRouter({
6261
},
6362
});
6463

65-
const entries: ReturnType<typeof defineEntries> = defineEntries({
66-
handleRequest: async (input, utils) => {
67-
if (input.type === 'custom') {
68-
return null; // no ssr
69-
}
70-
return router.handleRequest(input, utils);
71-
},
72-
handleBuild: (utils) => {
73-
return router.handleBuild(utils);
74-
},
75-
});
76-
77-
export default entries;
64+
export default router;

‎e2e/ssr-basic.spec.ts

+5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ for (const mode of ['DEV', 'PRD'] as const) {
2525
await expect(page.getByTestId('count')).toHaveText('3');
2626
});
2727

28+
test('not found', async ({ page }) => {
29+
await page.goto(`http://localhost:${port}/does-not-exist.txt`);
30+
await expect(page.getByText('Not Found')).toBeVisible();
31+
});
32+
2833
test('vercel ai', async ({ page }) => {
2934
await page.goto(`http://localhost:${port}/`);
3035
const aiLocator = page.getByTestId('vercel-ai');

‎packages/waku/src/lib/middleware/dev-server-impl.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ const createMainViteServer = (
128128
include: ['react-server-dom-webpack/client.edge'],
129129
},
130130
},
131-
appType: 'custom',
131+
appType: 'mpa',
132132
server: { middlewareMode: true },
133133
},
134134
config,
@@ -460,6 +460,8 @@ export const devServer: Middleware = (options) => {
460460
const body = await readablePromise;
461461
if (body) {
462462
ctx.res.body = body;
463+
} else if (ctx.res.status === 404) {
464+
delete ctx.res.status;
463465
}
464466
};
465467
};

‎packages/waku/src/lib/plugins/vite-plugin-rsc-index.ts

+17-13
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,23 @@ export function rscIndexPlugin(opts: {
4444
},
4545
configureServer(server) {
4646
return () => {
47-
server.middlewares.use((req, res) => {
48-
server
49-
.transformIndexHtml(req.url || '', html)
50-
.then((content) => {
51-
res.statusCode = 200;
52-
res.setHeader('content-type', 'text/html; charset=utf-8');
53-
res.end(content);
54-
})
55-
.catch((err) => {
56-
console.error('Error transforming index.html', err);
57-
res.statusCode = 500;
58-
res.end('Internal Server Error');
59-
});
47+
server.middlewares.use((req, res, next) => {
48+
if (req.url === opts.basePath) {
49+
server
50+
.transformIndexHtml(req.url, html)
51+
.then((content) => {
52+
res.statusCode = 200;
53+
res.setHeader('content-type', 'text/html; charset=utf-8');
54+
res.end(content);
55+
})
56+
.catch((err) => {
57+
console.error('Error transforming index.html', err);
58+
res.statusCode = 500;
59+
res.end('Internal Server Error');
60+
});
61+
} else {
62+
next();
63+
}
6064
});
6165
};
6266
},

0 commit comments

Comments
 (0)
Please sign in to comment.