litestar-vite 0.1.21__py3-none-any.whl → 0.2.0__py3-none-any.whl

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/loader.py CHANGED
@@ -1,18 +1,15 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import json
4
+ from functools import cached_property
4
5
  from pathlib import Path
5
- from typing import TYPE_CHECKING, Any, ClassVar, TypeVar
6
+ from textwrap import dedent
7
+ from typing import TYPE_CHECKING, Any, ClassVar
6
8
  from urllib.parse import urljoin
7
9
 
8
- from litestar.cli._utils import console
9
- from litestar.template import TemplateEngineProtocol
10
-
11
10
  if TYPE_CHECKING:
12
11
  from litestar_vite.config import ViteConfig
13
12
 
14
- T = TypeVar("T", bound=TemplateEngineProtocol)
15
-
16
13
 
17
14
  class ViteAssetLoader:
18
15
  """Vite manifest loader.
@@ -25,6 +22,7 @@ class ViteAssetLoader:
25
22
  def __init__(self, config: ViteConfig) -> None:
26
23
  self._config = config
27
24
  self._manifest: dict[str, Any] = {}
25
+ self._manifest_content: str = ""
28
26
  self._vite_base_path: str | None = None
29
27
 
30
28
  @classmethod
@@ -35,6 +33,12 @@ class ViteAssetLoader:
35
33
  cls._instance.parse_manifest()
36
34
  return cls._instance
37
35
 
36
+ @cached_property
37
+ def version_id(self) -> str:
38
+ if self._manifest_content != "":
39
+ return str(hash(self.manifest_content))
40
+ return "1.0"
41
+
38
42
  def parse_manifest(self) -> None:
39
43
  """Read and parse the Vite manifest file.
40
44
 
@@ -65,27 +69,27 @@ class ViteAssetLoader:
65
69
  RuntimeError: if cannot load the file or JSON in file is malformed.
66
70
  """
67
71
  if self._config.hot_reload and self._config.dev_mode:
68
- if Path(
72
+ hot_file_path = Path(
69
73
  f"{self._config.bundle_dir}/{self._config.hot_file}",
70
- ).exists():
71
- with Path(f"{self._config.bundle_dir}/{self._config.hot_file}").open() as hot_file:
74
+ )
75
+ if hot_file_path.exists():
76
+ with hot_file_path.open() as hot_file:
72
77
  self._vite_base_path = hot_file.read()
73
78
 
74
79
  else:
80
+ manifest_path = Path(f"{self._config.bundle_dir}/{self._config.manifest_name}")
75
81
  try:
76
- with Path(f"{self._config.bundle_dir}/{self._config.manifest_name}").open() as manifest_file:
77
- manifest_content = manifest_file.read()
78
- self._manifest = json.loads(manifest_content)
79
- except FileNotFoundError:
80
- console.print(
81
- f"[bold red]Cannot read Vite manifest file at {self._config.bundle_dir}/{self._config.manifest_name}. Did you forget to build your assets?",
82
- )
83
- self._manifest = {}
84
- except Exception as exc: # noqa: BLE001
82
+ if manifest_path.exists():
83
+ with manifest_path.open() as manifest_file:
84
+ self.manifest_content = manifest_file.read()
85
+ self._manifest = json.loads(self.manifest_content)
86
+ else:
87
+ self._manifest = {}
88
+ except Exception as exc:
85
89
  msg = "There was an issue reading the Vite manifest file at %s. Did you forget to build your assets?"
86
90
  raise RuntimeError(
87
91
  msg,
88
- Path(f"{self._config.bundle_dir}/{self._config.manifest_name}"),
92
+ manifest_path,
89
93
  ) from exc
90
94
 
91
95
  def generate_ws_client_tags(self) -> str:
@@ -112,7 +116,7 @@ class ViteAssetLoader:
112
116
  str: The script tag or an empty string.
113
117
  """
114
118
  if self._config.is_react and self._config.hot_reload and self._config.dev_mode:
115
- return f"""
119
+ return dedent(f"""
116
120
  <script type="module">
117
121
  import RefreshRuntime from '{self._vite_server_url()}@react-refresh'
118
122
  RefreshRuntime.injectIntoGlobalHook(window)
@@ -120,7 +124,7 @@ class ViteAssetLoader:
120
124
  window.$RefreshSig$ = () => (type) => type
121
125
  window.__vite_plugin_react_preamble_installed__=true
122
126
  </script>
123
- """
127
+ """)
124
128
  return ""
125
129
 
126
130
  def generate_asset_tags(self, path: str | list[str], scripts_attrs: dict[str, str] | None = None) -> str:
@@ -134,7 +138,9 @@ class ViteAssetLoader:
134
138
  if self._config.hot_reload and self._config.dev_mode:
135
139
  return "".join(
136
140
  [
137
- self._script_tag(
141
+ self._style_tag(self._vite_server_url(p))
142
+ if p.endswith(".css")
143
+ else self._script_tag(
138
144
  self._vite_server_url(p),
139
145
  {"type": "module", "async": "", "defer": ""},
140
146
  )
@@ -143,7 +149,7 @@ class ViteAssetLoader:
143
149
  )
144
150
 
145
151
  if any(p for p in path if p not in self._manifest):
146
- msg = "Cannot find %s in Vite manifest at %s. Did you forget to build your assets?"
152
+ msg = "Cannot find %s in Vite manifest at %s. Did you forget to build your assets after an update?"
147
153
  raise RuntimeError(
148
154
  msg,
149
155
  path,
@@ -151,30 +157,33 @@ class ViteAssetLoader:
151
157
  )
152
158
 
153
159
  tags: list[str] = []
154
- for p in path:
155
- manifest_entry: dict = self._manifest[p]
160
+ manifest_entry: dict[str, Any] = {}
161
+ manifest_entry.update({p: self._manifest[p] for p in path})
156
162
  if not scripts_attrs:
157
163
  scripts_attrs = {"type": "module", "async": "", "defer": ""}
158
-
159
- # Add dependent CSS
160
- if "css" in manifest_entry:
161
- tags.extend(
162
- self._style_tag(urljoin(self._config.asset_url, css_path)) for css_path in manifest_entry.get("css", {})
163
- )
164
- # Add dependent "vendor"
165
- if "imports" in manifest_entry:
166
- tags.extend(
167
- self.generate_asset_tags(vendor_path, scripts_attrs=scripts_attrs)
168
- for vendor_path in manifest_entry.get("imports", {})
169
- )
170
- # Add the script by itself
171
- tags.append(
172
- self._script_tag(
173
- urljoin(self._config.asset_url, manifest_entry["file"]),
174
- attrs=scripts_attrs,
175
- ),
176
- )
177
-
164
+ for manifest in manifest_entry.values():
165
+ if "css" in manifest:
166
+ tags.extend(
167
+ self._style_tag(urljoin(self._config.asset_url, css_path)) for css_path in manifest.get("css", {})
168
+ )
169
+ # Add dependent "vendor"
170
+ if "imports" in manifest:
171
+ tags.extend(
172
+ self.generate_asset_tags(vendor_path, scripts_attrs=scripts_attrs)
173
+ for vendor_path in manifest.get("imports", {})
174
+ )
175
+ # Add the script by itself
176
+ if manifest.get("file").endswith(".css"):
177
+ tags.append(
178
+ self._style_tag(urljoin(self._config.asset_url, manifest["file"])),
179
+ )
180
+ else:
181
+ tags.append(
182
+ self._script_tag(
183
+ urljoin(self._config.asset_url, manifest["file"]),
184
+ attrs=scripts_attrs,
185
+ ),
186
+ )
178
187
  return "".join(tags)
179
188
 
180
189
  def _vite_server_url(self, path: str | None = None) -> str:
@@ -194,7 +203,9 @@ class ViteAssetLoader:
194
203
 
195
204
  def _script_tag(self, src: str, attrs: dict[str, str] | None = None) -> str:
196
205
  """Generate an HTML script tag."""
197
- attrs_str = " ".join([f'{key}="{value}"' for key, value in attrs.items()]) if attrs is not None else ""
206
+ if attrs is None:
207
+ attrs = {}
208
+ attrs_str = " ".join([f'{key}="{value}"' for key, value in attrs.items()])
198
209
  return f'<script {attrs_str} src="{src}"></script>'
199
210
 
200
211
  def _style_tag(self, href: str) -> str:
litestar_vite/plugin.py CHANGED
@@ -6,14 +6,19 @@ from pathlib import Path
6
6
  from typing import TYPE_CHECKING, Iterator, cast
7
7
 
8
8
  from litestar.plugins import CLIPlugin, InitPluginProtocol
9
- from litestar.static_files import create_static_files_router
9
+ from litestar.static_files import (
10
+ create_static_files_router, # pyright: ignore[reportUnknownVariableType]
11
+ )
12
+
13
+ from litestar_vite.config import ViteConfig
10
14
 
11
15
  if TYPE_CHECKING:
12
16
  from click import Group
13
17
  from litestar import Litestar
14
18
  from litestar.config.app import AppConfig
15
19
 
16
- from litestar_vite.config import ViteConfig
20
+ from litestar_vite.config import ViteTemplateConfig
21
+ from litestar_vite.template_engine import ViteTemplateEngine
17
22
 
18
23
 
19
24
  def set_environment(config: ViteConfig) -> None:
@@ -23,6 +28,7 @@ def set_environment(config: ViteConfig) -> None:
23
28
  os.environ.setdefault("VITE_PORT", str(config.port))
24
29
  os.environ.setdefault("VITE_HOST", config.host)
25
30
  os.environ.setdefault("VITE_PROTOCOL", config.protocol)
31
+ os.environ.setdefault("APP_URL", "http://localhost:8000")
26
32
  if config.dev_mode:
27
33
  os.environ.setdefault("VITE_DEV_MODE", str(config.dev_mode))
28
34
 
@@ -32,23 +38,35 @@ class VitePlugin(InitPluginProtocol, CLIPlugin):
32
38
 
33
39
  __slots__ = ("_config",)
34
40
 
35
- def __init__(self, config: ViteConfig) -> None:
41
+ def __init__(self, config: ViteConfig | None = None) -> None:
36
42
  """Initialize ``Vite``.
37
43
 
38
44
  Args:
39
- config: configure and start Vite.
45
+ config: configuration to use for starting Vite. The default configuration will be used if it is not provided.
40
46
  """
47
+ if config is None:
48
+ config = ViteConfig()
41
49
  self._config = config
42
50
 
43
51
  @property
44
52
  def config(self) -> ViteConfig:
45
53
  return self._config
46
54
 
55
+ @property
56
+ def template_config(self) -> ViteTemplateConfig[ViteTemplateEngine]:
57
+ from litestar_vite.config import ViteTemplateConfig
58
+ from litestar_vite.template_engine import ViteTemplateEngine
59
+
60
+ return ViteTemplateConfig[ViteTemplateEngine](
61
+ engine=ViteTemplateEngine,
62
+ config=self._config,
63
+ directory=self._config.template_dir,
64
+ )
65
+
47
66
  def on_cli_init(self, cli: Group) -> None:
48
67
  from litestar_vite.cli import vite_group
49
68
 
50
69
  cli.add_command(vite_group)
51
- return super().on_cli_init(cli)
52
70
 
53
71
  def on_app_init(self, app_config: AppConfig) -> AppConfig:
54
72
  """Configure application for use with Vite.
@@ -57,14 +75,8 @@ class VitePlugin(InitPluginProtocol, CLIPlugin):
57
75
  app_config: The :class:`AppConfig <.config.app.AppConfig>` instance.
58
76
  """
59
77
 
60
- from litestar_vite.config import ViteTemplateConfig
61
- from litestar_vite.template_engine import ViteTemplateEngine
62
-
63
- app_config.template_config = ViteTemplateConfig( # type: ignore[assignment]
64
- engine=ViteTemplateEngine,
65
- config=self._config,
66
- directory=self._config.template_dir,
67
- )
78
+ if self._config.template_dir is not None:
79
+ app_config.template_config = self.template_config
68
80
 
69
81
  if self._config.set_static_folders:
70
82
  static_dirs = [Path(self._config.bundle_dir), Path(self._config.resource_dir)]
@@ -112,8 +124,13 @@ class VitePlugin(InitPluginProtocol, CLIPlugin):
112
124
  yield
113
125
  finally:
114
126
  if vite_thread.is_alive():
115
- vite_thread.join()
127
+ vite_thread.join(timeout=5)
116
128
  console.print("[yellow]Vite process stopped.[/]")
117
129
 
118
130
  else:
131
+ manifest_path = Path(f"{self._config.bundle_dir}/{self._config.manifest_name}")
132
+ if manifest_path.exists():
133
+ console.rule(f"[yellow]Serving assets using manifest at `{manifest_path!s}`.[/]", align="left")
134
+ else:
135
+ console.rule(f"[yellow]Serving assets without manifest at `{manifest_path!s}`.[/]", align="left")
119
136
  yield
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, TypeVar
3
+ from typing import TYPE_CHECKING, Any, Mapping, TypeVar
4
4
 
5
5
  import markupsafe
6
6
  from litestar.contrib.jinja import JinjaTemplateEngine
@@ -12,10 +12,11 @@ if TYPE_CHECKING:
12
12
  from pathlib import Path
13
13
 
14
14
  from jinja2 import Environment
15
+ from jinja2 import Template as JinjaTemplate
15
16
 
16
17
  from litestar_vite.config import ViteConfig
17
18
 
18
- T = TypeVar("T", bound=TemplateEngineProtocol)
19
+ T = TypeVar("T", bound=TemplateEngineProtocol["JinjaTemplate", Mapping[str, Any]])
19
20
 
20
21
 
21
22
  class ViteTemplateEngine(JinjaTemplateEngine):
@@ -39,9 +40,8 @@ class ViteTemplateEngine(JinjaTemplateEngine):
39
40
  msg = "Please configure the `ViteConfig` instance."
40
41
  raise ValueError(msg)
41
42
  self.config = config
42
-
43
43
  self.asset_loader = ViteAssetLoader.initialize_loader(config=self.config)
44
- self.engine.globals.update({"vite_hmr": self.get_hmr_client, "vite": self.get_asset_tag})
44
+ self.engine.globals.update({"vite_hmr": self.get_hmr_client, "vite": self.get_asset_tag}) # pyright: ignore[reportCallIssue,reportArgumentType]
45
45
 
46
46
  def get_hmr_client(self) -> markupsafe.Markup:
47
47
  """Generate the script tag for the Vite WS client for HMR.
@@ -62,6 +62,7 @@ class ViteTemplateEngine(JinjaTemplateEngine):
62
62
  self,
63
63
  path: str | list[str],
64
64
  scripts_attrs: dict[str, str] | None = None,
65
+ **_: Any,
65
66
  ) -> markupsafe.Markup:
66
67
  """Generate all assets include tags for the file in argument.
67
68
 
@@ -75,6 +76,7 @@ class ViteTemplateEngine(JinjaTemplateEngine):
75
76
  context: The template context.
76
77
  path: Path to a Vite asset to include.
77
78
  scripts_attrs: script attributes
79
+ _: extra args to satisfy type checking
78
80
 
79
81
  Keyword Arguments:
80
82
  scripts_attrs {Optional[Dict[str, str]]}: Override attributes added to scripts tags. (default: {None})
@@ -82,4 +84,21 @@ class ViteTemplateEngine(JinjaTemplateEngine):
82
84
  Returns:
83
85
  str: All tags to import this asset in your HTML page.
84
86
  """
85
- return markupsafe.Markup(self.asset_loader.generate_asset_tags(path, scripts_attrs=scripts_attrs))
87
+ if isinstance(path, str):
88
+ path = [path]
89
+ return markupsafe.Markup(
90
+ "".join([self.asset_loader.generate_asset_tags(p, scripts_attrs=scripts_attrs) for p in path]),
91
+ )
92
+
93
+ @classmethod
94
+ def from_environment(cls, config: ViteConfig, jinja_environment: Environment) -> ViteTemplateEngine: # type: ignore[override]
95
+ """Create a JinjaTemplateEngine from an existing jinja Environment instance.
96
+
97
+ Args:
98
+ config: Vite config
99
+ jinja_environment (jinja2.environment.Environment): A jinja Environment instance.
100
+
101
+ Returns:
102
+ JinjaTemplateEngine instance
103
+ """
104
+ return cls(directory=None, config=config, engine_instance=jinja_environment)
@@ -1,18 +1,16 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <!--IE compatibility-->
6
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
7
- <meta
8
- name="viewport"
9
- content="width=device-width, initial-scale=1.0, maximum-scale=1.0"
10
- />
11
- </head>
12
3
 
13
- <body>
14
- <div id="app"></div>
15
- {{ vite_hmr() }}
16
- {{ vite('resources/main.ts') }}
17
- </body>
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <!--IE compatibility-->
7
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
9
+ </head>
10
+
11
+ <body>
12
+ {{ vite_hmr() }}
13
+ {{ vite('resources/main.ts') }}
14
+ </body>
15
+
18
16
  </html>
@@ -0,0 +1 @@
1
+ import "./styles.css"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: litestar-vite
3
- Version: 0.1.21
3
+ Version: 0.2.0
4
4
  Summary: Vite plugin for Litestar
5
5
  Project-URL: Changelog, https://cofin.github.io/litestar-vite/latest/changelog
6
6
  Project-URL: Discord, https://discord.gg/X3FJqy8d2j
@@ -70,19 +70,9 @@ class WebController(Controller):
70
70
  return Template(template_name="index.html.j2")
71
71
 
72
72
 
73
- vite = VitePlugin(
74
- config=ViteConfig(
75
- bundle_dir=Path("./public"),
76
- resource_dir=Path("./resources"),
77
- template_dir=Path("./templates"),
78
- # Should be False when in production
79
- dev_mode=True,
80
- hot_reload=True, # Websocket HMR asset reloading is enabled when true.
81
- ),
82
- )
73
+ vite = VitePlugin(config=ViteConfig(template_dir='templates/'))
83
74
  app = Litestar(plugins=[vite], route_handlers=[WebController])
84
75
 
85
-
86
76
  ```
87
77
 
88
78
  Create a template to serve the application in `./templates/index.html.h2`:
@@ -0,0 +1,30 @@
1
+ litestar_vite/__init__.py,sha256=QEZzbM6LXuSm52rzpzcw3OihR7xxoPCZ6jhWtZH2dZc,402
2
+ litestar_vite/__metadata__.py,sha256=Eml1c9xezV-GSodmysksrT8jPWqE__x0ENO1wM5g6q0,319
3
+ litestar_vite/cli.py,sha256=foXJ-xW1bvUEsT7nPo1hbN0FLaDzHWPG4zpmqN__rY0,10976
4
+ litestar_vite/commands.py,sha256=sfTdFfMcDxnW3_tbmIIBjpHmNdQYKHjSguGxXNP8SVw,4440
5
+ litestar_vite/config.py,sha256=Mg86uVtqDG-uVZd2YUZoJYNRIlBBbyJLl8iI-fO1zKo,7527
6
+ litestar_vite/loader.py,sha256=USrzNDppXgXLvW5WCuIgKPuM6MlECNIssnkwb_p-E8s,8117
7
+ litestar_vite/plugin.py,sha256=2rwlumH3CFozb_7NGOFwn20BMZ_4JTNHiWh0oyaN-gc,5131
8
+ litestar_vite/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ litestar_vite/template_engine.py,sha256=ffC4KPtUUNkuC0tJ0bD1Bu7c8lE33vKP0US1fWUYnO8,3853
10
+ litestar_vite/inertia/__init__.py,sha256=PMOon8tag-20riAkHH3U4VLk7NBwt9lHsOHHSKMQHJQ,695
11
+ litestar_vite/inertia/_utils.py,sha256=IAsK4Nrjx2dr9z7rXBLHAu_FG8GvCpo_fpywY7RHwl0,1932
12
+ litestar_vite/inertia/config.py,sha256=6cYR4m5oGsJnL_rH6Dt8bQJ804Oq6knj6qDsCVUqNsI,942
13
+ litestar_vite/inertia/exception_handler.py,sha256=fXLfUtrooAORd7TWJGx8hDd6_0h_mI3w89CqJz5IMmE,4022
14
+ litestar_vite/inertia/middleware.py,sha256=9ADCoCNdQNLDYhQ6ctY4Lo92E_EtgBPqIo2SdOJz9zU,1766
15
+ litestar_vite/inertia/plugin.py,sha256=ebAG9XnDBahttuc7WIUgBd3o_Ys8MdPS273LPNs5H8A,2344
16
+ litestar_vite/inertia/request.py,sha256=UReg7_ks6MGa2HbIpDsD2DochckbLA-c-k8Er2mHkVA,3509
17
+ litestar_vite/inertia/response.py,sha256=31Hm838c7nJAkKe9joLj-c33UlZpWTFAgQefxLd5vn0,14379
18
+ litestar_vite/inertia/routes.py,sha256=QksJm2RUfL-WbuhOieYnPXXWO5GYnPtmsYEm6Ef8Yeo,1782
19
+ litestar_vite/inertia/types.py,sha256=tLp0pm1N__hcWC875khf6wH1nuFlKS9-VjDqgsRkXnw,702
20
+ litestar_vite/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ litestar_vite/templates/index.html.j2,sha256=Xue1cTl6piEOZkW3UG68SnW80NeL9PxaOp-Xr23kpr4,322
22
+ litestar_vite/templates/main.ts.j2,sha256=Nzr5m_hXMAjeDL_4yQNP3DMCf7Blh3dwg5m-67GJVbY,22
23
+ litestar_vite/templates/package.json.j2,sha256=0JWgdTuaSZ25EmCltF_zbqDdpxfvCLeYuzBjXrziXNw,299
24
+ litestar_vite/templates/styles.css.j2,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ litestar_vite/templates/tsconfig.json.j2,sha256=q1REIuVyXUHCy4Zi2kgTkmrhdT98vyY89k-WTrImOj8,843
26
+ litestar_vite/templates/vite.config.ts.j2,sha256=FZ4OJaB8Kjby_nlx4_LCP8eCe1LRi8kW2GspCiVMfDY,1115
27
+ litestar_vite-0.2.0.dist-info/METADATA,sha256=DGPtfcXb9Khk4EXmvwXCJAb2T992hzHkR3CLtIHAqG8,6180
28
+ litestar_vite-0.2.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
29
+ litestar_vite-0.2.0.dist-info/licenses/LICENSE,sha256=HeTiEfEgvroUXZe_xAmYHxtTBgw--mbXyZLsWDYabHc,1069
30
+ litestar_vite-0.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.22.3
2
+ Generator: hatchling 1.25.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,19 +0,0 @@
1
- litestar_vite/__init__.py,sha256=9X3i67Q8DJN2lQYAMa9NSPTZGzHASGn8X8yeWJqBvWg,357
2
- litestar_vite/__metadata__.py,sha256=Eml1c9xezV-GSodmysksrT8jPWqE__x0ENO1wM5g6q0,319
3
- litestar_vite/cli.py,sha256=6SmKu_wdduotTsx1xbmQFooQqG8SZyHwIDvZrr3KMJI,9527
4
- litestar_vite/commands.py,sha256=_TrBJE12HbsdKFkjGLpu8b_WvkoDp5-VV0xvRkYjsjk,4107
5
- litestar_vite/config.py,sha256=L93F0CrghlNrAHlmTPqYtZxtZoLPf5kOJebqFxAlVOE,6824
6
- litestar_vite/loader.py,sha256=3BFvcsXdaTwyym6bHaGhTkNDFaAcdjQDUHRfuKHj2vM,7699
7
- litestar_vite/plugin.py,sha256=nNB62gqRXv6x1nxJNxZZPd67zOaw9XvGQxP_AxDyPbk,4230
8
- litestar_vite/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- litestar_vite/template_engine.py,sha256=UIxphAoAKrAcpAuV_CJmZgsN9GOFfqq0azQdId6yofg,2995
10
- litestar_vite/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- litestar_vite/templates/index.html.j2,sha256=GobZbXgrlFRf3sCoS-416iWfV8lBP_v3AXPQX_QVzZA,381
12
- litestar_vite/templates/main.css.j2,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- litestar_vite/templates/package.json.j2,sha256=0JWgdTuaSZ25EmCltF_zbqDdpxfvCLeYuzBjXrziXNw,299
14
- litestar_vite/templates/tsconfig.json.j2,sha256=q1REIuVyXUHCy4Zi2kgTkmrhdT98vyY89k-WTrImOj8,843
15
- litestar_vite/templates/vite.config.ts.j2,sha256=FZ4OJaB8Kjby_nlx4_LCP8eCe1LRi8kW2GspCiVMfDY,1115
16
- litestar_vite-0.1.21.dist-info/METADATA,sha256=iWyAfdMchcgSKoDC-MX6Oq6zJ5a3TBQ-kO-7ELzpBO8,6437
17
- litestar_vite-0.1.21.dist-info/WHEEL,sha256=bq9SyP5NxIRA9EpQgMCd-9RmPHWvbH-4lTDGwxgIR64,87
18
- litestar_vite-0.1.21.dist-info/licenses/LICENSE,sha256=HeTiEfEgvroUXZe_xAmYHxtTBgw--mbXyZLsWDYabHc,1069
19
- litestar_vite-0.1.21.dist-info/RECORD,,
File without changes