From db947511b66d0571fe0d3ea0b63e40733e3962eb Mon Sep 17 00:00:00 2001 From: "songji.zeng" Date: Thu, 12 Sep 2024 15:10:51 +0800 Subject: [PATCH 1/2] Respect preserve_extname option in directory pin --- lib/importmap/map.rb | 10 ++++++---- .../javascript/shoelace/chunks/chunk.2L6GHXIJ.js | 0 .../shoelace/components/alert/alert.component.js | 0 .../javascript/shoelace/components/alert/alert.js | 0 .../vendor/javascript/shoelace/shoelace-autoloader.js | 0 test/importmap_test.rb | 9 +++++++++ 6 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 test/dummy/vendor/javascript/shoelace/chunks/chunk.2L6GHXIJ.js create mode 100644 test/dummy/vendor/javascript/shoelace/components/alert/alert.component.js create mode 100644 test/dummy/vendor/javascript/shoelace/components/alert/alert.js create mode 100644 test/dummy/vendor/javascript/shoelace/shoelace-autoloader.js diff --git a/lib/importmap/map.rb b/lib/importmap/map.rb index 43f0421..6bfa2b1 100644 --- a/lib/importmap/map.rb +++ b/lib/importmap/map.rb @@ -30,9 +30,9 @@ def pin(name, to: nil, preload: true) @packages[name] = MappedFile.new(name: name, path: to || "#{name}.js", preload: preload) end - def pin_all_from(dir, under: nil, to: nil, preload: true) + def pin_all_from(dir, under: nil, to: nil, preserve_extname: false, preload: true) clear_cache - @directories[dir] = MappedDir.new(dir: dir, under: under, path: to, preload: preload) + @directories[dir] = MappedDir.new(dir: dir, under: under, path: to, preserve_extname: preserve_extname, preload: preload) end # 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) end private - MappedDir = Struct.new(:dir, :path, :under, :preload, keyword_init: true) + MappedDir = Struct.new(:dir, :path, :under, :preserve_extname, :preload, keyword_init: true) MappedFile = Struct.new(:name, :path, :preload, keyword_init: true) def cache_as(name) @@ -151,7 +151,9 @@ def module_name_from(filename, mapping) # folder/index index_regex = /(?:\/|^)index$/ - [ mapping.under, filename.to_s.remove(filename.extname).remove(index_regex).presence ].compact.join("/") + [ mapping.under, filename.to_s.remove(filename.extname).remove(index_regex).presence ].compact.join("/").tap do |module_name| + module_name << filename.extname if mapping.preserve_extname + end end def module_path_from(filename, mapping) diff --git a/test/dummy/vendor/javascript/shoelace/chunks/chunk.2L6GHXIJ.js b/test/dummy/vendor/javascript/shoelace/chunks/chunk.2L6GHXIJ.js new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/vendor/javascript/shoelace/components/alert/alert.component.js b/test/dummy/vendor/javascript/shoelace/components/alert/alert.component.js new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/vendor/javascript/shoelace/components/alert/alert.js b/test/dummy/vendor/javascript/shoelace/components/alert/alert.js new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/vendor/javascript/shoelace/shoelace-autoloader.js b/test/dummy/vendor/javascript/shoelace/shoelace-autoloader.js new file mode 100644 index 0000000..e69de29 diff --git a/test/importmap_test.rb b/test/importmap_test.rb index 15c2290..6bf87bb 100644 --- a/test/importmap_test.rb +++ b/test/importmap_test.rb @@ -15,6 +15,7 @@ def setup pin_all_from "app/javascript/helpers", under: "helpers", preload: true pin_all_from "lib/assets/javascripts", preload: true pin_all_from "app/components", under: "controllers", to: "", preload: true + pin_all_from "vendor/javascript/shoelace", under: "shoelace", preserve_extname: true, preload: true end end end @@ -70,6 +71,14 @@ def setup assert_match %r|assets/my_lib-.*\.js|, generate_importmap_json["imports"]["my_lib"] end + test "directory pin respects remove_extname option" do + assert_nil generate_importmap_json["imports"]["shoelace/shoelace-autoloader"] + assert_match %r|shoelace/shoelace-autoloader-.*\.js|, generate_importmap_json["imports"]["shoelace/shoelace-autoloader.js"] + assert_match %r|shoelace/chunks/chunk.2L6GHXIJ-.*\.js|, generate_importmap_json["imports"]["shoelace/chunks/chunk.2L6GHXIJ.js"] + assert_match %r|shoelace/components/alert/alert-.*\.js|, generate_importmap_json["imports"]["shoelace/components/alert/alert.js"] + assert_match %r|shoelace/components/alert/alert.component-.*\.js|, generate_importmap_json["imports"]["shoelace/components/alert/alert.component.js"] + end + test 'invalid importmap file results in error' do file = file_fixture('invalid_import_map.rb') importmap = Importmap::Map.new From 8989e794b986ad49938270286ec77b2262e6d245 Mon Sep 17 00:00:00 2001 From: "songji.zeng" Date: Thu, 12 Sep 2024 15:39:19 +0800 Subject: [PATCH 2/2] typo --- test/importmap_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/importmap_test.rb b/test/importmap_test.rb index 6bf87bb..e17aeed 100644 --- a/test/importmap_test.rb +++ b/test/importmap_test.rb @@ -71,7 +71,7 @@ def setup assert_match %r|assets/my_lib-.*\.js|, generate_importmap_json["imports"]["my_lib"] end - test "directory pin respects remove_extname option" do + test "directory pin respects preserve_extname option" do assert_nil generate_importmap_json["imports"]["shoelace/shoelace-autoloader"] assert_match %r|shoelace/shoelace-autoloader-.*\.js|, generate_importmap_json["imports"]["shoelace/shoelace-autoloader.js"] assert_match %r|shoelace/chunks/chunk.2L6GHXIJ-.*\.js|, generate_importmap_json["imports"]["shoelace/chunks/chunk.2L6GHXIJ.js"]