diff options
-rw-r--r-- | packages/integrations/node/src/log-listening-on.ts | 14 | ||||
-rw-r--r-- | packages/integrations/node/src/preview.ts | 10 | ||||
-rw-r--r-- | packages/integrations/node/src/standalone.ts | 2 |
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, |