Source code for litestar_vite.config._paths

"""File system paths configuration."""

import os
from dataclasses import dataclass, field
from pathlib import Path

__all__ = ("PathConfig",)


[docs] @dataclass class PathConfig: """File system paths configuration. Attributes: root: The root directory of the project. Defaults to current working directory. bundle_dir: Location of compiled assets and manifest.json. resource_dir: TypeScript/JavaScript source directory (equivalent to ./src in Vue/React). static_dir: Static public assets directory (served as-is by Vite). manifest_name: Name of the Vite manifest file. hot_file: Name of the hot file indicating dev server URL. asset_url: Base URL for static asset references (prepended to Vite output). ssr_output_dir: SSR output directory (optional). """ root: "str | Path" = field(default_factory=Path.cwd) bundle_dir: "str | Path" = field(default_factory=lambda: Path("public")) resource_dir: "str | Path" = field(default_factory=lambda: Path("src")) static_dir: "str | Path" = field(default_factory=lambda: Path("public")) manifest_name: str = "manifest.json" hot_file: str = "hot" asset_url: str = field(default_factory=lambda: os.getenv("ASSET_URL", "/static/")) ssr_output_dir: "str | Path | None" = None
[docs] def __post_init__(self) -> None: """Normalize path types to Path objects. This also adjusts defaults to prevent Vite's ``publicDir`` (input) from colliding with ``outDir`` (output). ``bundle_dir`` is treated as the build output directory. When ``static_dir`` equals ``bundle_dir``, Vite may warn and effectively disable public asset copying, so ``static_dir`` defaults to ``<resource_dir>/public`` in that case. """ if isinstance(self.root, str): object.__setattr__(self, "root", Path(self.root)) if isinstance(self.bundle_dir, str): object.__setattr__(self, "bundle_dir", Path(self.bundle_dir)) if isinstance(self.resource_dir, str): object.__setattr__(self, "resource_dir", Path(self.resource_dir)) if isinstance(self.static_dir, str): object.__setattr__(self, "static_dir", Path(self.static_dir)) if isinstance(self.ssr_output_dir, str): object.__setattr__(self, "ssr_output_dir", Path(self.ssr_output_dir)) if ( isinstance(self.bundle_dir, Path) and isinstance(self.static_dir, Path) and self.static_dir == self.bundle_dir ): object.__setattr__(self, "static_dir", Path(self.resource_dir) / "public") asset_url = self.asset_url if asset_url and asset_url != "/" and not asset_url.endswith("/"): object.__setattr__(self, "asset_url", f"{asset_url}/")