Skip to content

Commit 9724d84

Browse files
author
Tony Sullivan
authored
fix(#2981): keeps astro preview server alive (#3004)
* fix(#2981): keeps server alive * chore: adding changeset * keep alive until the 'close' or 'error' event fires
1 parent ba90ef5 commit 9724d84

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

.changeset/big-yaks-invite.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'astro': patch
3+
---
4+
5+
Fix bug causing `astro preview` server to close immediately

packages/astro/src/cli/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ export async function cli(args: string[]) {
138138

139139
case 'preview': {
140140
try {
141-
return await preview(config, { logging }); // this will keep running
141+
const server = await preview(config, { logging });
142+
return await server.closed(); // keep alive until the server is closed
142143
} catch (err) {
143144
return throwAndExit(err);
144145
}

packages/astro/src/core/preview/index.ts

+10
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export interface PreviewServer {
1818
host?: string;
1919
port: number;
2020
server: http.Server;
21+
closed(): Promise<void>;
2122
stop(): Promise<void>;
2223
}
2324

@@ -133,9 +134,18 @@ export default async function preview(
133134
// Start listening on `hostname:port`.
134135
await startServer(startServerTime);
135136

137+
// Resolves once the server is closed
138+
function closed() {
139+
return new Promise<void>((resolve, reject) => {
140+
httpServer!.addListener('close', resolve);
141+
httpServer!.addListener('error', reject);
142+
})
143+
}
144+
136145
return {
137146
host,
138147
port,
148+
closed,
139149
server: httpServer!,
140150
stop: async () => {
141151
await new Promise((resolve, reject) => {

0 commit comments

Comments
 (0)