Skip to content

Commit 33ab429

Browse files
committed
[devtools] Add an endpoint to poll for server status
1 parent 2ef787b commit 33ab429

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

packages/next/src/client/components/react-dev-overlay/server/restart-dev-server-middleware.ts

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,23 @@ export function getRestartDevServerMiddleware({
1515
telemetry,
1616
turbopackProject,
1717
}: RestartDevServerMiddlewareConfig) {
18-
return async function (
18+
/**
19+
* Some random value between 1 and Number.MAX_SAFE_INTEGER (inclusive). The same value is returned
20+
* on every call to `__nextjs_server_status` until the server is restarted.
21+
*
22+
* Can be used to determine if two server status responses are from the same process or a
23+
* different (restarted) process.
24+
*/
25+
const executionId: number =
26+
Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1
27+
28+
async function handleRestartRequest(
1929
req: IncomingMessage,
2030
res: ServerResponse,
21-
next: () => void
22-
): Promise<void> {
23-
const { pathname, searchParams } = new URL(`http://n${req.url}`)
24-
if (pathname !== '/__nextjs_restart_dev' || req.method !== 'POST') {
25-
return next()
31+
searchParams: URLSearchParams
32+
) {
33+
if (req.method !== 'POST') {
34+
return middlewareResponse.methodNotAllowed(res)
2635
}
2736

2837
const invalidatePersistentCache = searchParams.has(
@@ -48,4 +57,31 @@ export function getRestartDevServerMiddleware({
4857

4958
return middlewareResponse.noContent(res)
5059
}
60+
61+
async function handleServerStatus(req: IncomingMessage, res: ServerResponse) {
62+
if (req.method !== 'GET') {
63+
return middlewareResponse.methodNotAllowed(res)
64+
}
65+
66+
return middlewareResponse.json(res, {
67+
executionId,
68+
})
69+
}
70+
71+
return async function (
72+
req: IncomingMessage,
73+
res: ServerResponse,
74+
next: () => void
75+
): Promise<void> {
76+
const { pathname, searchParams } = new URL(`http://n${req.url}`)
77+
78+
switch (pathname) {
79+
case '/__nextjs_restart_dev':
80+
return await handleRestartRequest(req, res, searchParams)
81+
case '/__nextjs_server_status':
82+
return await handleServerStatus(req, res)
83+
default:
84+
return next()
85+
}
86+
}
5187
}

0 commit comments

Comments
 (0)