Skip to content

Commit

Permalink
fix circular js import recursion
Browse files Browse the repository at this point in the history
  • Loading branch information
Niicck committed Jul 12, 2024
1 parent 00acae0 commit f3ad3f4
Showing 1 changed file with 29 additions and 13 deletions.
42 changes: 29 additions & 13 deletions django_vite/core/asset_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -427,13 +427,16 @@ def _load_css_files_of_asset(
class GeneratedCssFilesOutput(NamedTuple):
# list of generated CSS tags
tags: List[Tag]
# set of already processed js imports
already_processed_js: Set[str]
# set of already processed CSS tags
already_processed: Set[str]
already_processed_css: Set[str]

def _generate_css_files_of_asset(
self,
path: str,
already_processed: Optional[Set[str]] = None,
already_processed_js: Optional[Set[str]] = None,
already_processed_css: Optional[Set[str]] = None,
tag_generator: Callable[[str], Tag] = TagGenerator.stylesheet,
) -> GeneratedCssFilesOutput:
"""
Expand All @@ -448,25 +451,38 @@ def _generate_css_files_of_asset(
tags -- List of CSS tags.
already_processed -- List of already processed css paths
"""
if already_processed is None:
already_processed = set()
if already_processed_css is None:
already_processed_css = set()
if already_processed_js is None:
already_processed_js = set()
tags: List[Tag] = []
manifest_entry = self.manifest.get(path)

for import_path in manifest_entry.imports:
new_tags, new_already_processed = self._generate_css_files_of_asset(
import_path, already_processed, tag_generator
if import_path in already_processed_js:
continue
already_processed_js.add(import_path)
(
new_tags,
new_already_processed_js,
new_already_processed_css,
) = self._generate_css_files_of_asset(
import_path, already_processed_js, already_processed_css, tag_generator
)
already_processed.update(new_already_processed)
already_processed_js.update(new_already_processed_js)
already_processed_css.update(new_already_processed_css)
tags.extend(new_tags)

for css_path in manifest_entry.css:
if css_path not in already_processed:
url = self._get_production_server_url(css_path)
tags.append(tag_generator(url))
already_processed.add(css_path)

return self.GeneratedCssFilesOutput(tags, already_processed)
if css_path in already_processed_css:
continue
url = self._get_production_server_url(css_path)
tags.append(tag_generator(url))
already_processed_css.add(css_path)

return self.GeneratedCssFilesOutput(
tags, already_processed_js, already_processed_css
)

def generate_vite_asset_url(self, path: str) -> str:
"""
Expand Down

0 comments on commit f3ad3f4

Please sign in to comment.