Home / File/ preview.ts — astro Source File

preview.ts — astro Source File

Architecture documentation for preview.ts, a typescript file in the astro codebase. 6 imports, 0 dependents.

File typescript CoreAstro RoutingSystem 6 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  34969da5_3aef_c4dc_e500_3adc3dde5df6["preview.ts"]
  51a2098e_4246_bc69_a692_31865f56142c["./log-listening-on.js"]
  34969da5_3aef_c4dc_e500_3adc3dde5df6 --> 51a2098e_4246_bc69_a692_31865f56142c
  53f9c830_87f3_04da_5ae4_c688a53ce4ca["./server.js"]
  34969da5_3aef_c4dc_e500_3adc3dde5df6 --> 53f9c830_87f3_04da_5ae4_c688a53ce4ca
  4e577f48_d294_df8f_eaf1_6cca3c36eaf3["./standalone.js"]
  34969da5_3aef_c4dc_e500_3adc3dde5df6 --> 4e577f48_d294_df8f_eaf1_6cca3c36eaf3
  d9a92db9_c95e_9165_13ac_24b3d859d946["node:url"]
  34969da5_3aef_c4dc_e500_3adc3dde5df6 --> d9a92db9_c95e_9165_13ac_24b3d859d946
  f16d8c76_2866_6150_bd14_0347b59abfe9["astro"]
  34969da5_3aef_c4dc_e500_3adc3dde5df6 --> f16d8c76_2866_6150_bd14_0347b59abfe9
  b77270e1_f0f2_7ea7_00a0_eedcb9ad6bdb["errors"]
  34969da5_3aef_c4dc_e500_3adc3dde5df6 --> b77270e1_f0f2_7ea7_00a0_eedcb9ad6bdb
  style 34969da5_3aef_c4dc_e500_3adc3dde5df6 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { fileURLToPath } from 'node:url';
import type { CreatePreviewServer } from 'astro';
import { AstroError } from 'astro/errors';
import { logListeningOn } from './log-listening-on.js';
import type { createExports } from './server.js';
import { createServer } from './standalone.js';

type ServerModule = ReturnType<typeof createExports>;
type MaybeServerModule = Partial<ServerModule>;

const createPreviewServer: CreatePreviewServer = async (preview) => {
	let ssrHandler: ServerModule['handler'];
	try {
		process.env.ASTRO_NODE_AUTOSTART = 'disabled';
		const ssrModule: MaybeServerModule = await import(preview.serverEntrypoint.toString());
		if (typeof ssrModule.handler === 'function') {
			ssrHandler = ssrModule.handler;
		} else {
			throw new AstroError(
				`The server entrypoint doesn't have a handler. Are you sure this is the right file?`,
			);
		}
	} catch (err) {
		if (
			(err as any).code === 'ERR_MODULE_NOT_FOUND' &&
			(err as any).url === preview.serverEntrypoint.href
		) {
			throw new AstroError(
				`The server entrypoint ${fileURLToPath(
					preview.serverEntrypoint,
				)} does not exist. Have you ran a build yet?`,
			);
		} else {
			throw err;
		}
	}
	// 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);

	// If user specified custom headers append a listener
	// to the server to add those headers to response
	if (preview.headers) {
		server.server.addListener('request', (_, res) => {
			if (res.statusCode === 200) {
				for (const [name, value] of Object.entries(preview.headers ?? {})) {
					if (value) res.setHeader(name, value);
				}
			}
		});
	}

	logListeningOn(preview.logger, server.server, host);
	await new Promise<void>((resolve, reject) => {
		server.server.once('listening', resolve);
		server.server.once('error', reject);
		server.server.listen(port, host);
	});
	return server;
};

export { createPreviewServer as default };

Domain

Subdomains

Dependencies

  • ./log-listening-on.js
  • ./server.js
  • ./standalone.js
  • astro
  • errors
  • node:url

Frequently Asked Questions

What does preview.ts do?
preview.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RoutingSystem subdomain.
What functions are defined in preview.ts?
preview.ts defines 1 function(s): createPreviewServer.
What does preview.ts depend on?
preview.ts imports 6 module(s): ./log-listening-on.js, ./server.js, ./standalone.js, astro, errors, node:url.
Where is preview.ts in the architecture?
preview.ts is located at packages/integrations/node/src/preview.ts (domain: CoreAstro, subdomain: RoutingSystem, directory: packages/integrations/node/src).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free