Skip to content

Commit 01d28ca

Browse files
gobengoyusukebe
andauthoredJan 16, 2025··
fix(dev-server): Fix issue in dev-server where requestListener would return null (#212)
* Fix issue in dev-server where requestListener would return null * add patch changeset for dev-server fix * add a test --------- Co-authored-by: Yusuke Wada <yusuke@kamawada.com>
1 parent e7d3a11 commit 01d28ca

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed
 

‎.changeset/long-panthers-decide.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@hono/vite-dev-server': patch
3+
---
4+
5+
dev-server plugin getRequestListener fetchCallback now always returns Promise<Response> instead of sometimes returning Promise<null>

‎packages/dev-server/e2e/e2e.test.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { test, expect } from '@playwright/test'
1+
import { test, expect, request } from '@playwright/test'
22

33
test('Should return 200 response', async ({ page }) => {
44
const response = await page.goto('/')
@@ -122,3 +122,16 @@ test('Should return files in the public directory', async ({ page }) => {
122122
const res = await page.goto('/hono-logo.png')
123123
expect(res?.status()).toBe(200)
124124
})
125+
126+
test('Should not crash when receiving a HEAD request', async () => {
127+
const apiContext = await request.newContext()
128+
const response = await apiContext.fetch('/', {
129+
method: 'HEAD',
130+
})
131+
132+
expect(response.status()).toBe(200)
133+
expect(response.headers()['content-type']).toMatch(/^text\/html/)
134+
const body = await response.body()
135+
expect(body.length).toBe(0)
136+
await apiContext.dispose()
137+
})

‎packages/dev-server/src/dev-server.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export function devServer(options?: DevServerOptions): VitePlugin {
126126
}
127127

128128
getRequestListener(
129-
async (request) => {
129+
async (request): Promise<Response> => {
130130
let env: Env = {}
131131

132132
if (options?.env) {
@@ -168,7 +168,7 @@ export function devServer(options?: DevServerOptions): VitePlugin {
168168
.get('content-security-policy')
169169
?.match(/'nonce-([^']+)'/)?.[1]
170170
const script = `<script${nonce ? ` nonce="${nonce}"` : ''}>import("/@vite/client")</script>`
171-
return injectStringToResponse(response, script)
171+
return injectStringToResponse(response, script) ?? response
172172
}
173173
return response
174174
},

0 commit comments

Comments
 (0)
Please sign in to comment.