litestar-vite 0.10.0__tar.gz → 0.11.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of litestar-vite might be problematic. Click here for more details.
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/PKG-INFO +1 -1
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/pyproject.toml +2 -2
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/cli.py +1 -1
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/commands.py +1 -1
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/plugin.py +69 -20
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/.gitignore +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/LICENSE +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/README.md +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/LICENSE +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/Makefile +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/NOTICE +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/README.md +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/src/dev-server-index.html +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/src/index.ts +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/src/inertia-helpers/index.ts +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/tests/__data__/dummy.ts +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/tests/index.test.ts +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/tsconfig.inertia-helpers.json +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/tsconfig.json +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/vitest.config.ts +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/js/vitest.workspace.ts +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/__metadata__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/config.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/_utils.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/config.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/exception_handler.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/middleware.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/plugin.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/request.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/response.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/routes.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/types.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/loader.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/py.typed +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/index.html.j2 +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/main.ts.j2 +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/package.json.j2 +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/styles.css.j2 +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/tsconfig.json.j2 +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/vite.config.ts.j2 +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/conftest.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/templates/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/templates/index.html.j2 +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/app.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/public/.gitkeep +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/public/assets/main-l0sNRNKZ.js +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/public/assets/styles-l0sNRNKZ.js +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/public/manifest.json +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/resources/.gitkeep +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/resources/main.ts +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/resources/styles.css +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/templates/.gitkeep +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/templates/index.html +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_asset_loader.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_cli/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_cli/conftest.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_cli/test_init.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_commands.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_config.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/__init__.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/conftest.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/templates/index.html.j2 +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/test_inertia_request.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/test_inertia_response.py +0 -0
- {litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/test_routes.py +0 -0
|
@@ -25,7 +25,7 @@ license = { text = "MIT" }
|
|
|
25
25
|
name = "litestar-vite"
|
|
26
26
|
readme = "README.md"
|
|
27
27
|
requires-python = ">=3.8"
|
|
28
|
-
version = "0.
|
|
28
|
+
version = "0.11.1"
|
|
29
29
|
|
|
30
30
|
[project.urls]
|
|
31
31
|
Changelog = "https://cofin.github.io/litestar-vite/latest/changelog"
|
|
@@ -85,7 +85,7 @@ test = [
|
|
|
85
85
|
allow_dirty = true
|
|
86
86
|
commit = true
|
|
87
87
|
commit_args = "--no-verify"
|
|
88
|
-
current_version = "0.
|
|
88
|
+
current_version = "0.11.1"
|
|
89
89
|
ignore_missing_files = false
|
|
90
90
|
ignore_missing_version = false
|
|
91
91
|
message = "chore(release): bump to v{new_version}"
|
|
@@ -113,8 +113,8 @@ def vite_init(
|
|
|
113
113
|
)
|
|
114
114
|
from rich.prompt import Confirm
|
|
115
115
|
|
|
116
|
+
from litestar_vite import VitePlugin
|
|
116
117
|
from litestar_vite.commands import execute_command, init_vite
|
|
117
|
-
from litestar_vite.plugin import VitePlugin
|
|
118
118
|
|
|
119
119
|
if callable(ctx.obj):
|
|
120
120
|
ctx.obj = ctx.obj()
|
|
@@ -14,7 +14,7 @@ DEFAULT_RESOURCES: set[str] = {"styles.css.j2", "main.ts.j2"}
|
|
|
14
14
|
DEFAULT_DEV_DEPENDENCIES: dict[str, str] = {
|
|
15
15
|
"typescript": "^5.7.2",
|
|
16
16
|
"vite": "^6.0.3",
|
|
17
|
-
"litestar-vite-plugin": "^0.
|
|
17
|
+
"litestar-vite-plugin": "^0.11.1",
|
|
18
18
|
"@types/node": "^22.10.1",
|
|
19
19
|
}
|
|
20
20
|
DEFAULT_DEPENDENCIES: dict[str, str] = {"axios": "^1.7.2"}
|
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
+
import platform
|
|
5
|
+
import signal
|
|
6
|
+
import subprocess
|
|
7
|
+
import threading
|
|
4
8
|
from contextlib import contextmanager
|
|
5
9
|
from pathlib import Path
|
|
6
10
|
from typing import TYPE_CHECKING, Iterator, cast
|
|
7
11
|
|
|
12
|
+
from litestar.cli._utils import console
|
|
8
13
|
from litestar.contrib.jinja import JinjaTemplateEngine
|
|
9
14
|
from litestar.exceptions import ImproperlyConfiguredException
|
|
10
15
|
from litestar.plugins import CLIPlugin, InitPluginProtocol
|
|
11
16
|
from litestar.static_files import create_static_files_router # pyright: ignore[reportUnknownVariableType]
|
|
12
17
|
|
|
13
|
-
from litestar_vite.config import ViteConfig
|
|
14
|
-
from litestar_vite.loader import ViteAssetLoader, render_asset_tag, render_hmr_client
|
|
15
|
-
|
|
16
18
|
if TYPE_CHECKING:
|
|
17
19
|
from click import Group
|
|
18
20
|
from litestar import Litestar
|
|
19
21
|
from litestar.config.app import AppConfig
|
|
20
22
|
|
|
23
|
+
from litestar_vite.config import ViteConfig
|
|
24
|
+
from litestar_vite.loader import ViteAssetLoader
|
|
25
|
+
|
|
21
26
|
|
|
22
27
|
def set_environment(config: ViteConfig) -> None:
|
|
23
28
|
"""Configure environment for easier integration"""
|
|
@@ -31,11 +36,57 @@ def set_environment(config: ViteConfig) -> None:
|
|
|
31
36
|
os.environ.setdefault("VITE_DEV_MODE", str(config.dev_mode))
|
|
32
37
|
|
|
33
38
|
|
|
39
|
+
class ViteProcess:
|
|
40
|
+
"""Manages the Vite process."""
|
|
41
|
+
|
|
42
|
+
def __init__(self) -> None:
|
|
43
|
+
self.process: subprocess.Popen | None = None # pyright: ignore[reportUnknownMemberType,reportMissingTypeArgument]
|
|
44
|
+
self._lock = threading.Lock()
|
|
45
|
+
|
|
46
|
+
def start(self, command: list[str], cwd: Path | str | None) -> None:
|
|
47
|
+
"""Start the Vite process."""
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
with self._lock:
|
|
51
|
+
if self.process and self.process.poll() is None: # pyright: ignore[reportUnknownMemberType]
|
|
52
|
+
return
|
|
53
|
+
|
|
54
|
+
console.print(f"Starting Vite process with command: {command}")
|
|
55
|
+
self.process = subprocess.Popen(
|
|
56
|
+
command,
|
|
57
|
+
cwd=cwd,
|
|
58
|
+
shell=platform.system() == "Windows",
|
|
59
|
+
)
|
|
60
|
+
except Exception as e:
|
|
61
|
+
console.print(f"[red]Failed to start Vite process: {e!s}[/]")
|
|
62
|
+
raise
|
|
63
|
+
|
|
64
|
+
def stop(self, timeout: float = 5.0) -> None:
|
|
65
|
+
"""Stop the Vite process."""
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
with self._lock:
|
|
69
|
+
if self.process and self.process.poll() is None: # pyright: ignore[reportUnknownMemberType]
|
|
70
|
+
# Send SIGTERM to child process
|
|
71
|
+
if hasattr(signal, "SIGTERM"):
|
|
72
|
+
self.process.terminate() # pyright: ignore[reportUnknownMemberType]
|
|
73
|
+
try:
|
|
74
|
+
self.process.wait(timeout=timeout) # pyright: ignore[reportUnknownMemberType]
|
|
75
|
+
except subprocess.TimeoutExpired:
|
|
76
|
+
# Force kill if still alive
|
|
77
|
+
if hasattr(signal, "SIGKILL"):
|
|
78
|
+
self.process.kill() # pyright: ignore[reportUnknownMemberType]
|
|
79
|
+
self.process.wait(timeout=1.0) # pyright: ignore[reportUnknownMemberType]
|
|
80
|
+
console.print("Stopping Vite process")
|
|
81
|
+
except Exception as e:
|
|
82
|
+
console.print(f"[red]Failed to stop Vite process: {e!s}[/]")
|
|
83
|
+
raise
|
|
84
|
+
|
|
85
|
+
|
|
34
86
|
class VitePlugin(InitPluginProtocol, CLIPlugin):
|
|
35
87
|
"""Vite plugin."""
|
|
36
88
|
|
|
37
|
-
__slots__ = ("_asset_loader", "_config")
|
|
38
|
-
_asset_loader: ViteAssetLoader | None
|
|
89
|
+
__slots__ = ("_asset_loader", "_config", "_vite_process")
|
|
39
90
|
|
|
40
91
|
def __init__(self, config: ViteConfig | None = None, asset_loader: ViteAssetLoader | None = None) -> None:
|
|
41
92
|
"""Initialize ``Vite``.
|
|
@@ -44,10 +95,13 @@ class VitePlugin(InitPluginProtocol, CLIPlugin):
|
|
|
44
95
|
config: configuration to use for starting Vite. The default configuration will be used if it is not provided.
|
|
45
96
|
asset_loader: an initialized asset loader to use for rendering asset tags.
|
|
46
97
|
"""
|
|
98
|
+
from litestar_vite.config import ViteConfig
|
|
99
|
+
|
|
47
100
|
if config is None:
|
|
48
101
|
config = ViteConfig()
|
|
49
102
|
self._config = config
|
|
50
103
|
self._asset_loader = asset_loader
|
|
104
|
+
self._vite_process = ViteProcess()
|
|
51
105
|
|
|
52
106
|
@property
|
|
53
107
|
def config(self) -> ViteConfig:
|
|
@@ -55,6 +109,8 @@ class VitePlugin(InitPluginProtocol, CLIPlugin):
|
|
|
55
109
|
|
|
56
110
|
@property
|
|
57
111
|
def asset_loader(self) -> ViteAssetLoader:
|
|
112
|
+
from litestar_vite.loader import ViteAssetLoader
|
|
113
|
+
|
|
58
114
|
if self._asset_loader is None:
|
|
59
115
|
self._asset_loader = ViteAssetLoader.initialize_loader(config=self._config)
|
|
60
116
|
return self._asset_loader
|
|
@@ -70,6 +126,8 @@ class VitePlugin(InitPluginProtocol, CLIPlugin):
|
|
|
70
126
|
Args:
|
|
71
127
|
app_config: The :class:`AppConfig <litestar.config.app.AppConfig>` instance.
|
|
72
128
|
"""
|
|
129
|
+
from litestar_vite.loader import render_asset_tag, render_hmr_client
|
|
130
|
+
|
|
73
131
|
if app_config.template_config is None: # pyright: ignore[reportUnknownMemberType]
|
|
74
132
|
msg = "A template configuration is required for Vite."
|
|
75
133
|
raise ImproperlyConfiguredException(msg)
|
|
@@ -105,34 +163,25 @@ class VitePlugin(InitPluginProtocol, CLIPlugin):
|
|
|
105
163
|
|
|
106
164
|
@contextmanager
|
|
107
165
|
def server_lifespan(self, app: Litestar) -> Iterator[None]:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
from litestar.cli._utils import console
|
|
111
|
-
|
|
112
|
-
from litestar_vite.commands import execute_command
|
|
166
|
+
"""Manage Vite server process lifecycle."""
|
|
113
167
|
|
|
114
168
|
if self._config.use_server_lifespan and self._config.dev_mode:
|
|
115
169
|
command_to_run = self._config.run_command if self._config.hot_reload else self._config.build_watch_command
|
|
170
|
+
|
|
116
171
|
if self.config.hot_reload:
|
|
117
172
|
console.rule("[yellow]Starting Vite process with HMR Enabled[/]", align="left")
|
|
118
173
|
else:
|
|
119
174
|
console.rule("[yellow]Starting Vite watch and build process[/]", align="left")
|
|
175
|
+
|
|
120
176
|
if self._config.set_environment:
|
|
121
177
|
set_environment(config=self._config)
|
|
122
|
-
|
|
123
|
-
name="vite",
|
|
124
|
-
target=execute_command,
|
|
125
|
-
args=[],
|
|
126
|
-
kwargs={"command_to_run": command_to_run, "cwd": self._config.root_dir},
|
|
127
|
-
)
|
|
178
|
+
|
|
128
179
|
try:
|
|
129
|
-
|
|
180
|
+
self._vite_process.start(command_to_run, self._config.root_dir)
|
|
130
181
|
yield
|
|
131
182
|
finally:
|
|
132
|
-
|
|
133
|
-
vite_thread.join(timeout=5)
|
|
183
|
+
self._vite_process.stop()
|
|
134
184
|
console.print("[yellow]Vite process stopped.[/]")
|
|
135
|
-
|
|
136
185
|
else:
|
|
137
186
|
manifest_path = Path(f"{self._config.bundle_dir}/{self._config.manifest_name}")
|
|
138
187
|
if manifest_path.exists():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/inertia/exception_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/package.json.j2
RENAMED
|
File without changes
|
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/tsconfig.json.j2
RENAMED
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/litestar_vite/templates/vite.config.ts.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/public/manifest.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/resources/styles.css
RENAMED
|
File without changes
|
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_app/web/templates/index.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/templates/index.html.j2
RENAMED
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/test_inertia_request.py
RENAMED
|
File without changes
|
{litestar_vite-0.10.0 → litestar_vite-0.11.1}/src/py/tests/test_inertia/test_inertia_response.py
RENAMED
|
File without changes
|
|
File without changes
|