summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/integrations/node/src/log-listening-on.ts14
-rw-r--r--packages/integrations/node/src/preview.ts10
-rw-r--r--packages/integrations/node/src/standalone.ts2
3 files changed, 15 insertions, 11 deletions
diff --git a/packages/integrations/node/src/log-listening-on.ts b/packages/integrations/node/src/log-listening-on.ts
index 2f774c31c..88c4e9d80 100644
--- a/packages/integrations/node/src/log-listening-on.ts
+++ b/packages/integrations/node/src/log-listening-on.ts
@@ -5,21 +5,21 @@ import os from 'node:os';
import type { AstroIntegrationLogger } from 'astro';
import type { Options } from './types.js';
+const wildcardHosts = new Set(['0.0.0.0', '::', '0000:0000:0000:0000:0000:0000:0000:0000']);
+
export async function logListeningOn(
logger: AstroIntegrationLogger,
server: http.Server | https.Server,
- options: Pick<Options, 'host'>
+ configuredHost: string | boolean | undefined
) {
await new Promise<void>((resolve) => server.once('listening', resolve));
const protocol = server instanceof https.Server ? 'https' : 'http';
// Allow to provide host value at runtime
- const host = getResolvedHostForHttpServer(
- process.env.HOST !== undefined && process.env.HOST !== '' ? process.env.HOST : options.host
- );
+ const host = getResolvedHostForHttpServer(configuredHost);
const { port } = server.address() as AddressInfo;
const address = getNetworkAddress(protocol, host, port);
- if (host === undefined) {
+ if (host === undefined || wildcardHosts.has(host)) {
logger.info(
`Server listening on \n local: ${address.local[0]} \t\n network: ${address.network[0]}\n`
);
@@ -28,7 +28,7 @@ export async function logListeningOn(
}
}
-function getResolvedHostForHttpServer(host: string | boolean) {
+function getResolvedHostForHttpServer(host: string | boolean | undefined) {
if (host === false) {
// Use a secure default
return 'localhost';
@@ -47,8 +47,6 @@ interface NetworkAddressOpt {
network: string[];
}
-const wildcardHosts = new Set(['0.0.0.0', '::', '0000:0000:0000:0000:0000:0000:0000:0000']);
-
// this code from vite https://github.com/vitejs/vite/blob/d09bbd093a4b893e78f0bbff5b17c7cf7821f403/packages/vite/src/node/utils.ts#L892-L914
export function getNetworkAddress(
// biome-ignore lint/style/useDefaultParameterLast: <explanation>
diff --git a/packages/integrations/node/src/preview.ts b/packages/integrations/node/src/preview.ts
index 7e9415df8..94a81bfdb 100644
--- a/packages/integrations/node/src/preview.ts
+++ b/packages/integrations/node/src/preview.ts
@@ -35,7 +35,13 @@ const createPreviewServer: CreatePreviewServer = async (preview) => {
throw err;
}
}
- const host = preview.host ?? 'localhost';
+ // If the user didn't specify a host, it will already have been defaulted to
+ // "localhost" by getResolvedHostForHttpServer in astro core/preview/util.ts.
+ // The value `undefined` actually means that either the user set `options.server.host`
+ // to `true`, or they passed `--host` without an argument. In that case, we
+ // should listen on all IPs.
+ const host = process.env.HOST ?? preview.host ?? '0.0.0.0';
+
const port = preview.port ?? 4321;
const server = createServer(ssrHandler, host, port);
@@ -51,7 +57,7 @@ const createPreviewServer: CreatePreviewServer = async (preview) => {
});
}
- logListeningOn(preview.logger, server.server, options);
+ logListeningOn(preview.logger, server.server, host);
await new Promise<void>((resolve, reject) => {
server.server.once('listening', resolve);
server.server.once('error', reject);
diff --git a/packages/integrations/node/src/standalone.ts b/packages/integrations/node/src/standalone.ts
index c7c8033ed..fadcc37b4 100644
--- a/packages/integrations/node/src/standalone.ts
+++ b/packages/integrations/node/src/standalone.ts
@@ -24,7 +24,7 @@ export default function standalone(app: NodeApp, options: Options) {
const server = createServer(handler, host, port);
server.server.listen(port, host);
if (process.env.ASTRO_NODE_LOGGING !== 'disabled') {
- logListeningOn(app.getAdapterLogger(), server.server, options);
+ logListeningOn(app.getAdapterLogger(), server.server, host);
}
return {
server,