Skip to content

Commit 6429ba5

Browse files
author
Stanislav Lashmanov
committed
feat: support advanced entrypoints
1. Entrypoints with custom names that don't match the file name 2. CSS-only entrypoints
1 parent d4bd2ef commit 6429ba5

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

test/manifest_test.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,26 @@ def test_lookup_success!
152152
assert_equal lookup!("entrypoints/main", type: :typescript), lookup!("main.ts")
153153
end
154154

155+
def test_custom_name_lookup_success!
156+
entry = {
157+
"file" => prefixed("main.CkQYLEXT.js"),
158+
"name" => "entrypoints/custom-name",
159+
"src" => "entrypoints/main.js",
160+
"isEntry" => true,
161+
}
162+
163+
assert_equal entry, lookup!("custom-name", type: :javascript)
164+
end
165+
166+
def test_css_lookup_success!
167+
entry = {
168+
"isEntry" => true,
169+
"file" => prefixed("application-ru2hYTUX.css"),
170+
}
171+
172+
assert_equal entry, lookup!("stylesheets/application.css", type: :stylesheet)
173+
end
174+
155175
def test_lookup_success_with_dev_server_running!
156176
refresh_config(mode: "development")
157177
with_dev_server_running {

test/test_app/public/vite-production/.vite/manifest.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,20 @@
8989
"assets/theme.e6d9734b.css"
9090
]
9191
},
92+
"entrypoints/main.js": {
93+
"file": "assets/main.CkQYLEXT.js",
94+
"name": "entrypoints/custom-name",
95+
"src": "entrypoints/main.js",
96+
"isEntry": true
97+
},
98+
"stylesheets/application.scss": {
99+
"file": "assets/application-ru2hYTUX.css",
100+
"src": "stylesheets/application.scss",
101+
"isEntry": true,
102+
"names": [
103+
"stylesheets/application.css"
104+
]
105+
},
92106
"../assets/external.js": {
93107
"file": "assets/external.d1ae13f1.js",
94108
"src": "../assets/external.js",

vite_ruby/lib/vite_ruby/manifest.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,23 @@ def vite_asset_origin
152152

153153
# Internal: Resolves the paths that reference a manifest entry.
154154
def resolve_references(manifest)
155+
asset_entries = {}
155156
manifest.each_value do |entry|
156-
entry["file"] = prefix_vite_asset(entry["file"])
157+
file = entry["file"] = prefix_vite_asset(entry["file"])
157158
%w[css assets].each do |key|
158159
entry[key] = entry[key].map { |path| prefix_vite_asset(path) } if entry[key]
159160
end
160161
entry["imports"]&.map! { |name| manifest.fetch(name) }
162+
asset_entries[entry["name"] + ".js"] = entry if entry["name"] && entry["isEntry"]
163+
# handle scss/css entrypoints
164+
entry["names"]&.each do |name|
165+
asset_entries[name] = {
166+
"isEntry" => true,
167+
"file" => file,
168+
}
169+
end
161170
end
171+
manifest.merge!(asset_entries)
162172
end
163173

164174
# Internal: Resolves the manifest entry name for the specified resource.

0 commit comments

Comments
 (0)