Home / File/ index.ts — astro Source File

index.ts — astro Source File

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

File typescript CoreAstro RenderingEngine 16 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  63facc8f_3f77_a711_93ac_5bdb5f731fce["index.ts"]
  d3861967_b647_84d2_ff48_15013353bd56["../core/logger/core.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> d3861967_b647_84d2_ff48_15013353bd56
  e62808d9_0c55_b3a9_00c0_ce588f164dab["../events/index.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> e62808d9_0c55_b3a9_00c0_ce588f164dab
  e86f3c40_dd80_f866_50bb_4b859a344ece["../../events/session.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> e86f3c40_dd80_f866_50bb_4b859a344ece
  ec3f57f9_1334_b72b_abeb_11b186147ebe["../integrations/hooks.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> ec3f57f9_1334_b72b_abeb_11b186147ebe
  c32d12e2_d85e_28c0_eea7_9b29629857e0["../types/public/config.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> c32d12e2_d85e_28c0_eea7_9b29629857e0
  0661edc4_b8e9_5753_c753_14e8ad7c5d3c["../../types/public/preview.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> 0661edc4_b8e9_5753_c753_14e8ad7c5d3c
  0b371444_fc7b_922f_b8b5_b663fe1868ae["../config/config.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> 0b371444_fc7b_922f_b8b5_b663fe1868ae
  cce3ff1b_1104_9b70_1982_a2d0a05516ee["../config/logging.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> cce3ff1b_1104_9b70_1982_a2d0a05516ee
  be05b58c_f851_32bc_6dab_b19e296f04b4["../config/settings.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> be05b58c_f851_32bc_6dab_b19e296f04b4
  bf5441b3_b825_f070_aed3_a0f2ac54caa3["../core/routing/manifest/create.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> bf5441b3_b825_f070_aed3_a0f2ac54caa3
  f68003f1_292f_ca44_03ce_21af87a33c7b["../core/util.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> f68003f1_292f_ca44_03ce_21af87a33c7b
  dbfcbd99_9295_7621_625e_03b4dedf8018["./static-preview-server.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> dbfcbd99_9295_7621_625e_03b4dedf8018
  8cf28db7_8f58_521d_48ac_0a62be28c962["./util.js"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> 8cf28db7_8f58_521d_48ac_0a62be28c962
  e16a223b_37f3_6b25_1ee1_2b7bcb9d9415["node:fs"]
  63facc8f_3f77_a711_93ac_5bdb5f731fce --> e16a223b_37f3_6b25_1ee1_2b7bcb9d9415
  style 63facc8f_3f77_a711_93ac_5bdb5f731fce fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import fs from 'node:fs';
import { createRequire } from 'node:module';
import { fileURLToPath, pathToFileURL } from 'node:url';
import { AstroIntegrationLogger } from '../../core/logger/core.js';
import { telemetry } from '../../events/index.js';
import { eventCliSession } from '../../events/session.js';
import { runHookConfigDone, runHookConfigSetup } from '../../integrations/hooks.js';
import type { AstroInlineConfig } from '../../types/public/config.js';
import type { PreviewModule, PreviewServer } from '../../types/public/preview.js';
import { resolveConfig } from '../config/config.js';
import { createNodeLogger } from '../config/logging.js';
import { createSettings } from '../config/settings.js';
import { createRoutesList } from '../routing/manifest/create.js';
import { ensureProcessNodeEnv } from '../util.js';
import createStaticPreviewServer from './static-preview-server.js';
import { getResolvedHostForHttpServer } from './util.js';

/**
 * Starts a local server to serve your static dist/ directory. This command is useful for previewing
 * your build locally, before deploying it. It is not designed to be run in production.
 *
 * @experimental The JavaScript API is experimental
 */
export default async function preview(inlineConfig: AstroInlineConfig): Promise<PreviewServer> {
	ensureProcessNodeEnv('production');
	const logger = createNodeLogger(inlineConfig);
	const { userConfig, astroConfig } = await resolveConfig(inlineConfig ?? {}, 'preview');
	telemetry.record(eventCliSession('preview', userConfig));

	const _settings = await createSettings(
		astroConfig,
		inlineConfig.logLevel,
		fileURLToPath(astroConfig.root),
	);

	const settings = await runHookConfigSetup({
		settings: _settings,
		command: 'preview',
		logger: logger,
	});

	// Create a route manifest so we can know if the build output is a static site or not
	await createRoutesList({ settings: settings, cwd: inlineConfig.root }, logger);

	await runHookConfigDone({ settings: settings, logger: logger, command: 'preview' });

	if (settings.buildOutput === 'static') {
		if (!fs.existsSync(settings.config.outDir)) {
			const outDirPath = fileURLToPath(settings.config.outDir);
			throw new Error(
				`[preview] The output directory ${outDirPath} does not exist. Did you run \`astro build\`?`,
			);
		}
		const server = await createStaticPreviewServer(settings, logger);
		return server;
	}

	if (!settings.adapter) {
		throw new Error(`[preview] No adapter found.`);
	}

	if (!settings.adapter.previewEntrypoint) {
		throw new Error(
			`[preview] The ${settings.adapter.name} adapter does not support the preview command.`,
		);
	}
	// We need to use require.resolve() here so that advanced package managers like pnpm
	// don't treat this as a dependency of Astro itself. This correctly resolves the
	// preview entrypoint of the integration package, relative to the user's project root.
	const require = createRequire(settings.config.root);
	const previewEntrypointUrl = pathToFileURL(
		require.resolve(settings.adapter.previewEntrypoint.toString()),
	).href;

	const previewModule = (await import(previewEntrypointUrl)) as Partial<PreviewModule>;
	if (typeof previewModule.default !== 'function') {
		throw new Error(`[preview] ${settings.adapter.name} cannot preview your app.`);
	}

	const server = await previewModule.default({
		outDir: settings.config.outDir,
		client: settings.config.build.client,
		server: settings.config.build.server,
		serverEntrypoint: new URL(settings.config.build.serverEntry, settings.config.build.server),
		host: getResolvedHostForHttpServer(settings.config.server.host),
		port: settings.config.server.port,
		base: settings.config.base,
		logger: new AstroIntegrationLogger(logger.options, settings.adapter.name),
		headers: settings.config.server.headers,
		root: settings.config.root,
	});

	return server;
}

Domain

Subdomains

Functions

Dependencies

  • ../../events/session.js
  • ../../types/public/preview.js
  • ../config/config.js
  • ../config/logging.js
  • ../config/settings.js
  • ../core/logger/core.js
  • ../core/routing/manifest/create.js
  • ../core/util.js
  • ../events/index.js
  • ../integrations/hooks.js
  • ../types/public/config.js
  • ./static-preview-server.js
  • ./util.js
  • node:fs
  • node:module
  • node:url

Frequently Asked Questions

What does index.ts do?
index.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 index.ts?
index.ts defines 1 function(s): preview.
What does index.ts depend on?
index.ts imports 16 module(s): ../../events/session.js, ../../types/public/preview.js, ../config/config.js, ../config/logging.js, ../config/settings.js, ../core/logger/core.js, ../core/routing/manifest/create.js, ../core/util.js, and 8 more.
Where is index.ts in the architecture?
index.ts is located at packages/astro/src/core/preview/index.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