From 34f47d53d1afcf37d2c6fd9a584a8559865a316e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dorian=20Mari=C3=A9?= Date: Fri, 19 Jul 2024 08:24:20 +0200 Subject: [PATCH] make multiline importmap definitions work with `importmap outdated` for instance i had a package that kept being marked as outdated and thus my ci was failing --- lib/importmap/npm.rb | 4 ++-- .../files/multiline_outdated_import_map.rb | 2 ++ .../files/multiline_updated_import_map.rb | 2 ++ test/npm_test.rb | 24 +++++++++++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/files/multiline_outdated_import_map.rb create mode 100644 test/fixtures/files/multiline_updated_import_map.rb diff --git a/lib/importmap/npm.rb b/lib/importmap/npm.rb index 4a54f85..05c8493 100644 --- a/lib/importmap/npm.rb +++ b/lib/importmap/npm.rb @@ -48,8 +48,8 @@ def packages_with_versions # We cannot use the name after "pin" because some dependencies are loaded from inside packages # Eg. pin "buffer", to: "https://ga.jspm.io/npm:@jspm/core@2.0.0-beta.19/nodelibs/browser/buffer.js" - importmap.scan(/^pin .*(?<=npm:|npm\/|skypack\.dev\/|unpkg\.com\/)(.*)(?=@\d+\.\d+\.\d+)@(\d+\.\d+\.\d+(?:[^\/\s["']]*)).*$/) | - importmap.scan(/^pin ["']([^["']]*)["'].* #.*@(\d+\.\d+\.\d+(?:[^\s]*)).*$/) + importmap.scan(/pin .*(?<=npm:|npm\/|skypack\.dev\/|unpkg\.com\/)(.*)(?=@\d+\.\d+\.\d+)@(\d+\.\d+\.\d+(?:[^\/\s["']]*)).*/m) | + importmap.scan(/pin ["']([^["']]*)["'].* #.*@(\d+\.\d+\.\d+(?:[^\s]*)).*/m) end private diff --git a/test/fixtures/files/multiline_outdated_import_map.rb b/test/fixtures/files/multiline_outdated_import_map.rb new file mode 100644 index 0000000..0f3e0ed --- /dev/null +++ b/test/fixtures/files/multiline_outdated_import_map.rb @@ -0,0 +1,2 @@ +ipin "intl-tel-input/build/js/utils.js", + to: "intl-tel-input--build--js--utils.js.js" # @23.5.0 diff --git a/test/fixtures/files/multiline_updated_import_map.rb b/test/fixtures/files/multiline_updated_import_map.rb new file mode 100644 index 0000000..e03aca9 --- /dev/null +++ b/test/fixtures/files/multiline_updated_import_map.rb @@ -0,0 +1,2 @@ +ipin "intl-tel-input/build/js/utils.js", + to: "intl-tel-input--build--js--utils.js.js" # @23.3.2 diff --git a/test/npm_test.rb b/test/npm_test.rb index a53f8b0..6b4cebb 100644 --- a/test/npm_test.rb +++ b/test/npm_test.rb @@ -46,6 +46,30 @@ class Importmap::NpmTest < ActiveSupport::TestCase end end + test "successful outdated packages using multiple lines" do + npm = Importmap::Npm.new(file_fixture("multiline_outdated_import_map.rb")) + response = { "dist-tags" => { "latest" => '23.5.0' } }.to_json + + npm.stub(:get_json, response) do + outdated_packages = npm.outdated_packages + + assert_equal(1, outdated_packages.size) + assert_equal('intl-tel-input/build/js/utils.js', outdated_packages[0].name) + assert_equal('23.3.2', outdated_packages[0].current_version) + assert_equal('23.5.0', outdated_packages[0].latest_version) + end + end + + test "successful updarted packages using multiple lines" do + npm = Importmap::Npm.new(file_fixture("multiline_updated_import_map.rb")) + response = { "dist-tags" => { "latest" => '23.5.0' } }.to_json + + npm.stub(:get_json, response) do + outdated_packages = npm.outdated_packages + assert_equal(0, outdated_packages.size) + end + end + test "missing outdated packages with mock" do response = { "error" => "Not found" }.to_json