Skip to content

Commit cdea8a8

Browse files
committed
fix: ensure imported CSS is resolved recursively (close #600)
1 parent e61af05 commit cdea8a8

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

vite_ruby/lib/vite_ruby/manifest.rb

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,30 @@ def path_for(name, **options)
2222
lookup!(name, **options).fetch("file")
2323
end
2424

25+
# Internal: Recursively collects all imported chunks for a given entry.
26+
# Returns chunks in dependency-first order (deepest imports first), deduped.
27+
def import_chunks_for(entry, seen_filenames: Set.new)
28+
chunks = []
29+
30+
entry["imports"]&.each do |chunk|
31+
filename = chunk["file"]
32+
next if seen_filenames.include?(filename)
33+
seen_filenames.add(filename)
34+
35+
chunks.concat(import_chunks_for(chunk, seen_filenames: seen_filenames))
36+
chunks << chunk
37+
end
38+
39+
chunks
40+
end
41+
2542
# Public: Returns scripts, imported modules, and stylesheets for the specified
2643
# entrypoint files.
2744
def resolve_entries(*names, **options)
2845
entries = names.map { |name| lookup!(name, **options) }
2946
script_paths = entries.map { |entry| entry.fetch("file") }
3047

31-
imports = dev_server_running? ? [] : entries.flat_map { |entry| entry["imports"] }.compact
48+
imports = dev_server_running? ? [] : entries.flat_map { |entry| import_chunks_for(entry) }
3249
{
3350
scripts: script_paths,
3451
imports: imports.filter_map { |entry| entry.fetch("file") }.uniq,

0 commit comments

Comments
 (0)