Home / File/ vite.ts — astro Source File

vite.ts — astro Source File

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

File typescript CoreAstro RenderingEngine 6 imports 2 functions

Entity Profile

Dependency Diagram

graph LR
  0f5f9214_1b3f_8bf1_41bd_715cbd410eb7["vite.ts"]
  dd6187d6_53c4_ce90_a1d1_3a0b5e7e7d3f["../../core/errors/errors.js"]
  0f5f9214_1b3f_8bf1_41bd_715cbd410eb7 --> dd6187d6_53c4_ce90_a1d1_3a0b5e7e7d3f
  8db17b08_b9e5_db7e_cd39_46be76c6d5ad["../core/messages.js"]
  0f5f9214_1b3f_8bf1_41bd_715cbd410eb7 --> 8db17b08_b9e5_db7e_cd39_46be76c6d5ad
  d3861967_b647_84d2_ff48_15013353bd56["../core/logger/core.js"]
  0f5f9214_1b3f_8bf1_41bd_715cbd410eb7 --> d3861967_b647_84d2_ff48_15013353bd56
  d9a92db9_c95e_9165_13ac_24b3d859d946["node:url"]
  0f5f9214_1b3f_8bf1_41bd_715cbd410eb7 --> d9a92db9_c95e_9165_13ac_24b3d859d946
  b4a76fc8_3591_85b4_7b57_55ab21d1030d["node:util"]
  0f5f9214_1b3f_8bf1_41bd_715cbd410eb7 --> b4a76fc8_3591_85b4_7b57_55ab21d1030d
  263e522e_1aa5_ebc3_e7d6_45ebc51671f7["vite"]
  0f5f9214_1b3f_8bf1_41bd_715cbd410eb7 --> 263e522e_1aa5_ebc3_e7d6_45ebc51671f7
  style 0f5f9214_1b3f_8bf1_41bd_715cbd410eb7 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { fileURLToPath } from 'node:url';
import { stripVTControlCharacters } from 'node:util';
import type { LogLevel, Rollup, Logger as ViteLogger } from 'vite';
import { isAstroError } from '../errors/errors.js';
import { serverShortcuts as formatServerShortcuts } from '../messages.js';
import { type Logger as AstroLogger, isLogLevelEnabled } from './core.js';

const PKG_PREFIX = fileURLToPath(new URL('../../../', import.meta.url));
const E2E_PREFIX = fileURLToPath(new URL('../../../e2e', import.meta.url));
function isAstroSrcFile(id: string | null) {
	return id?.startsWith(PKG_PREFIX) && !id.startsWith(E2E_PREFIX);
}

// capture "page reload some/Component.vue (additional info)" messages
const vitePageReloadMsg = /page reload (.*)/;
// capture "hmr update some/Component.vue" messages
const viteHmrUpdateMsg = /hmr update (.*)/;
// capture "vite v5.0.0 building SSR bundle for production..." and "vite v5.0.0 building for production..." messages
const viteBuildMsg = /vite.*building.*for production/;
// capture "\n  Shortcuts" messages
const viteShortcutTitleMsg = /^\s*Shortcuts\s*$/;
// capture "press * + enter to ..." messages
const viteShortcutHelpMsg = /press (.+?) to (.+)$/s;
// 'global' is not recognized as a valid pseudo-class
const lightningcssUnsupportedPseudoMsg = /\[lightningcss\] 'global'.*not recognized.*pseudo-class/s;

export function createViteLogger(
	astroLogger: AstroLogger,
	viteLogLevel: LogLevel = 'info',
): ViteLogger {
	const warnedMessages = new Set<string>();
	const loggedErrors = new WeakSet<Error | Rollup.RollupError>();

	const logger: ViteLogger = {
		hasWarned: false,
		info(msg) {
			if (!isLogLevelEnabled(viteLogLevel, 'info')) return;

			const stripped = stripVTControlCharacters(msg);
			let m;
			// Rewrite HMR page reload message
			if ((m = vitePageReloadMsg.exec(stripped))) {
				if (isAstroSrcFile(m[1])) return;
				astroLogger.info('watch', m[1]);
			}
			// Rewrite HMR update message
			else if ((m = viteHmrUpdateMsg.exec(stripped))) {
				if (isAstroSrcFile(m[1])) return;
				astroLogger.info('watch', m[1]);
			}
			// Don't log Vite build messages and shortcut titles
			else if (viteBuildMsg.test(stripped) || viteShortcutTitleMsg.test(stripped)) {
				// noop
			}
			// Log shortcuts help messages without indent
			else if (viteShortcutHelpMsg.test(stripped)) {
				const [, key, label] = viteShortcutHelpMsg.exec(stripped)! as string[];
				astroLogger.info('SKIP_FORMAT', formatServerShortcuts({ key, label }));
			}
			// Fallback
			else {
				astroLogger.info('vite', msg);
			}
		},
		warn(msg) {
			if (!isLogLevelEnabled(viteLogLevel, 'warn')) return;

			if (lightningcssUnsupportedPseudoMsg.test(msg)) return;

			logger.hasWarned = true;
			astroLogger.warn('vite', msg);
		},
		warnOnce(msg) {
			if (!isLogLevelEnabled(viteLogLevel, 'warn')) return;

			if (warnedMessages.has(msg)) return;
			logger.hasWarned = true;
			astroLogger.warn('vite', msg);
			warnedMessages.add(msg);
		},
		error(msg, opts) {
			if (!isLogLevelEnabled(viteLogLevel, 'error')) return;

			logger.hasWarned = true;

			const err = opts?.error;
			if (err) loggedErrors.add(err);
			// Astro errors are already logged by us, skip logging
			if (err && isAstroError(err)) return;
			// SSR module and pre-transform errors are always handled by us,
			// send to debug logs
			if (
				msg.includes('Error when evaluating SSR module') ||
				msg.includes('Pre-transform error:')
			) {
				astroLogger.debug('vite', msg);
				return;
			}

			astroLogger.error('vite', msg);
		},
		// Don't allow clear screen
		clearScreen: () => {},
		hasErrorLogged(error) {
			return loggedErrors.has(error);
		},
	};

	return logger;
}

Domain

Subdomains

Dependencies

  • ../../core/errors/errors.js
  • ../core/logger/core.js
  • ../core/messages.js
  • node:url
  • node:util
  • vite

Frequently Asked Questions

What does vite.ts do?
vite.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 vite.ts?
vite.ts defines 2 function(s): createViteLogger, isAstroSrcFile.
What does vite.ts depend on?
vite.ts imports 6 module(s): ../../core/errors/errors.js, ../core/logger/core.js, ../core/messages.js, node:url, node:util, vite.
Where is vite.ts in the architecture?
vite.ts is located at packages/astro/src/core/logger/vite.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/core/logger).

Analyze Your Own Codebase

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

Try Supermodel Free