Skip to content

Commit db94751

Browse files
committed
Respect preserve_extname option in directory pin
1 parent 0a63301 commit db94751

File tree

6 files changed

+15
-4
lines changed

6 files changed

+15
-4
lines changed

lib/importmap/map.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ def pin(name, to: nil, preload: true)
3030
@packages[name] = MappedFile.new(name: name, path: to || "#{name}.js", preload: preload)
3131
end
3232

33-
def pin_all_from(dir, under: nil, to: nil, preload: true)
33+
def pin_all_from(dir, under: nil, to: nil, preserve_extname: false, preload: true)
3434
clear_cache
35-
@directories[dir] = MappedDir.new(dir: dir, under: under, path: to, preload: preload)
35+
@directories[dir] = MappedDir.new(dir: dir, under: under, path: to, preserve_extname: preserve_extname, preload: preload)
3636
end
3737

3838
# Returns an array of all the resolved module paths of the pinned packages. The `resolver` must respond to
@@ -84,7 +84,7 @@ def cache_sweeper(watches: nil)
8484
end
8585

8686
private
87-
MappedDir = Struct.new(:dir, :path, :under, :preload, keyword_init: true)
87+
MappedDir = Struct.new(:dir, :path, :under, :preserve_extname, :preload, keyword_init: true)
8888
MappedFile = Struct.new(:name, :path, :preload, keyword_init: true)
8989

9090
def cache_as(name)
@@ -151,7 +151,9 @@ def module_name_from(filename, mapping)
151151
# folder/index
152152
index_regex = /(?:\/|^)index$/
153153

154-
[ mapping.under, filename.to_s.remove(filename.extname).remove(index_regex).presence ].compact.join("/")
154+
[ mapping.under, filename.to_s.remove(filename.extname).remove(index_regex).presence ].compact.join("/").tap do |module_name|
155+
module_name << filename.extname if mapping.preserve_extname
156+
end
155157
end
156158

157159
def module_path_from(filename, mapping)

test/dummy/vendor/javascript/shoelace/chunks/chunk.2L6GHXIJ.js

Whitespace-only changes.

test/dummy/vendor/javascript/shoelace/components/alert/alert.component.js

Whitespace-only changes.

test/dummy/vendor/javascript/shoelace/components/alert/alert.js

Whitespace-only changes.

test/dummy/vendor/javascript/shoelace/shoelace-autoloader.js

Whitespace-only changes.

test/importmap_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def setup
1515
pin_all_from "app/javascript/helpers", under: "helpers", preload: true
1616
pin_all_from "lib/assets/javascripts", preload: true
1717
pin_all_from "app/components", under: "controllers", to: "", preload: true
18+
pin_all_from "vendor/javascript/shoelace", under: "shoelace", preserve_extname: true, preload: true
1819
end
1920
end
2021
end
@@ -70,6 +71,14 @@ def setup
7071
assert_match %r|assets/my_lib-.*\.js|, generate_importmap_json["imports"]["my_lib"]
7172
end
7273

74+
test "directory pin respects remove_extname option" do
75+
assert_nil generate_importmap_json["imports"]["shoelace/shoelace-autoloader"]
76+
assert_match %r|shoelace/shoelace-autoloader-.*\.js|, generate_importmap_json["imports"]["shoelace/shoelace-autoloader.js"]
77+
assert_match %r|shoelace/chunks/chunk.2L6GHXIJ-.*\.js|, generate_importmap_json["imports"]["shoelace/chunks/chunk.2L6GHXIJ.js"]
78+
assert_match %r|shoelace/components/alert/alert-.*\.js|, generate_importmap_json["imports"]["shoelace/components/alert/alert.js"]
79+
assert_match %r|shoelace/components/alert/alert.component-.*\.js|, generate_importmap_json["imports"]["shoelace/components/alert/alert.component.js"]
80+
end
81+
7382
test 'invalid importmap file results in error' do
7483
file = file_fixture('invalid_import_map.rb')
7584
importmap = Importmap::Map.new

0 commit comments

Comments
 (0)