Home / File/ static-preview-server.ts — astro Source File

static-preview-server.ts — astro Source File

Architecture documentation for static-preview-server.ts, a typescript file in the astro codebase. 9 imports, 0 dependents.

File typescript CoreAstro RenderingEngine 9 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  bf1307cf_9863_81da_aef9_4f34d8a84d2e["static-preview-server.ts"]
  e9b74c5a_8d34_34a7_e196_5e41b87214aa["../types/astro.js"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> e9b74c5a_8d34_34a7_e196_5e41b87214aa
  d3861967_b647_84d2_ff48_15013353bd56["../core/logger/core.js"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> d3861967_b647_84d2_ff48_15013353bd56
  8db17b08_b9e5_db7e_cd39_46be76c6d5ad["../core/messages.js"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> 8db17b08_b9e5_db7e_cd39_46be76c6d5ad
  8cf28db7_8f58_521d_48ac_0a62be28c962["./util.js"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> 8cf28db7_8f58_521d_48ac_0a62be28c962
  8c70344e_a2f9_dd1b_f56a_c3cd56c0274b["./vite-plugin-astro-preview.js"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> 8c70344e_a2f9_dd1b_f56a_c3cd56c0274b
  c2f6615e_96e9_c4eb_5f71_cf120e271705["node:http"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> c2f6615e_96e9_c4eb_5f71_cf120e271705
  253d3b9c_f382_44a6_02fa_ae7052447d04["node:perf_hooks"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> 253d3b9c_f382_44a6_02fa_ae7052447d04
  d9a92db9_c95e_9165_13ac_24b3d859d946["node:url"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> d9a92db9_c95e_9165_13ac_24b3d859d946
  263e522e_1aa5_ebc3_e7d6_45ebc51671f7["vite"]
  bf1307cf_9863_81da_aef9_4f34d8a84d2e --> 263e522e_1aa5_ebc3_e7d6_45ebc51671f7
  style bf1307cf_9863_81da_aef9_4f34d8a84d2e fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type http from 'node:http';
import { performance } from 'node:perf_hooks';
import { fileURLToPath } from 'node:url';
import type * as vite from 'vite';
import { preview, type PreviewServer as VitePreviewServer } from 'vite';
import type { AstroSettings } from '../../types/astro.js';
import type { Logger } from '../logger/core.js';
import * as msg from '../messages.js';
import { getResolvedHostForHttpServer } from './util.js';
import { vitePluginAstroPreview } from './vite-plugin-astro-preview.js';

interface PreviewServer {
	host?: string;
	port: number;
	server: http.Server;
	closed(): Promise<void>;
	stop(): Promise<void>;
}

export default async function createStaticPreviewServer(
	settings: AstroSettings,
	logger: Logger,
): Promise<PreviewServer> {
	const startServerTime = performance.now();

	let previewServer: VitePreviewServer;
	try {
		previewServer = await preview({
			configFile: false,
			base: settings.config.base,
			appType: 'mpa',
			build: {
				outDir: fileURLToPath(settings.config.outDir),
			},
			root: fileURLToPath(settings.config.root),
			preview: {
				host: settings.config.server.host,
				port: settings.config.server.port,
				headers: settings.config.server.headers,
				open: settings.config.server.open,
				allowedHosts: settings.config.server.allowedHosts,
			},
			plugins: [vitePluginAstroPreview(settings)],
		});
	} catch (err) {
		if (err instanceof Error) {
			logger.error(null, err.stack || err.message);
		}
		throw err;
	}

	// Set up shortcuts

	const customShortcuts: Array<vite.CLIShortcut> = [
		// Disable default Vite shortcuts that don't work well with Astro
		{ key: 'r', description: '' },
		{ key: 'u', description: '' },
		{ key: 'c', description: '' },
		{ key: 's', description: '' },
	];

	previewServer.bindCLIShortcuts({
		customShortcuts,
	});

	// Log server start URLs
	logger.info(
		'SKIP_FORMAT',
		msg.serverStart({
			startupTime: performance.now() - startServerTime,
			resolvedUrls: previewServer.resolvedUrls ?? { local: [], network: [] },
			host: settings.config.server.host,
			base: settings.config.base,
		}),
	);

	// Resolves once the server is closed
	function closed() {
		return new Promise<void>((resolve, reject) => {
			previewServer.httpServer.addListener('close', resolve);
			previewServer.httpServer.addListener('error', reject);
		});
	}

	return {
		host: getResolvedHostForHttpServer(settings.config.server.host),
		port: settings.config.server.port,
		closed,
		server: previewServer.httpServer as http.Server,
		stop: previewServer.close.bind(previewServer),
	};
}

Domain

Subdomains

Dependencies

  • ../core/logger/core.js
  • ../core/messages.js
  • ../types/astro.js
  • ./util.js
  • ./vite-plugin-astro-preview.js
  • node:http
  • node:perf_hooks
  • node:url
  • vite

Frequently Asked Questions

What does static-preview-server.ts do?
static-preview-server.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RenderingEngine subdomain.
What functions are defined in static-preview-server.ts?
static-preview-server.ts defines 1 function(s): createStaticPreviewServer.
What does static-preview-server.ts depend on?
static-preview-server.ts imports 9 module(s): ../core/logger/core.js, ../core/messages.js, ../types/astro.js, ./util.js, ./vite-plugin-astro-preview.js, node:http, node:perf_hooks, node:url, and 1 more.
Where is static-preview-server.ts in the architecture?
static-preview-server.ts is located at packages/astro/src/core/preview/static-preview-server.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/core/preview).

Analyze Your Own Codebase

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

Try Supermodel Free