Skip to content

Add --preload option to pin command #298

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions Appraisals
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,37 @@ end
appraise "rails_7_1_sprockets" do
gem "rails", "~> 7.1.0"
gem "sprockets-rails"

group :test do
remove_gem "concurrent-ruby"
end
end

appraise "rails_7_1_propshaft" do
gem "rails", "~> 7.1.0"
gem "propshaft"

group :test do
remove_gem "concurrent-ruby"
end
end

appraise "rails_main_sprockets" do
gem "rails", github: "rails/rails", branch: "main"
gem "sprockets-rails"
gem "sqlite3", ">= 2.1"

group :test do
remove_gem "concurrent-ruby"
end
end

appraise "rails_main_propshaft" do
gem "rails", github: "rails/rails", branch: "main"
gem "propshaft"
gem "sqlite3", ">= 2.1"

group :test do
remove_gem "concurrent-ruby"
end
end
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ group :test do
gem "capybara"
gem "selenium-webdriver"
gem "webdrivers"

gem "concurrent-ruby", "1.3.4"
end
1 change: 1 addition & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ DEPENDENCIES
appraisal
byebug
capybara
concurrent-ruby (= 1.3.4)
importmap-rails!
rails (~> 6.1.0)
rexml
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails_7_0_propshaft.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ group :test do
gem "capybara"
gem "selenium-webdriver"
gem "webdrivers"
gem "concurrent-ruby", "1.3.4"
end

gemspec path: "../"
1 change: 1 addition & 0 deletions gemfiles/rails_7_0_propshaft.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ DEPENDENCIES
appraisal
byebug
capybara
concurrent-ruby (= 1.3.4)
importmap-rails!
propshaft
rails (~> 7.0.0)
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails_7_0_sprockets.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ group :test do
gem "capybara"
gem "selenium-webdriver"
gem "webdrivers"
gem "concurrent-ruby", "1.3.4"
end

gemspec path: "../"
1 change: 1 addition & 0 deletions gemfiles/rails_7_0_sprockets.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ DEPENDENCIES
appraisal
byebug
capybara
concurrent-ruby (= 1.3.4)
importmap-rails!
rails (~> 7.0.0)
rexml
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails_main_propshaft.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
source "https://rubygems.org"

gem "rails", branch: "main", git: "https://github.com/rails/rails.git"
gem "sqlite3"
gem "sqlite3", ">= 2.1"
gem "propshaft"

group :development do
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails_main_sprockets.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
source "https://rubygems.org"

gem "rails", branch: "main", git: "https://github.com/rails/rails.git"
gem "sqlite3"
gem "sqlite3", ">= 2.1"
gem "sprockets-rails"

group :development do
Expand Down
3 changes: 2 additions & 1 deletion lib/importmap/commands.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ def self.exit_on_failure?
desc "pin [*PACKAGES]", "Pin new packages"
option :env, type: :string, aliases: :e, default: "production"
option :from, type: :string, aliases: :f, default: "jspm"
option :preload, type: :string, repeatable: true, desc: "Can be used multiple times"
def pin(*packages)
if imports = packager.import(*packages, env: options[:env], from: options[:from])
imports.each do |package, url|
puts %(Pinning "#{package}" to #{packager.vendor_path}/#{package}.js via download from #{url})
packager.download(package, url)
pin = packager.vendored_pin_for(package, url)
pin = packager.vendored_pin_for(package, url, options[:preload])

if packager.packaged?(package)
gsub_file("config/importmap.rb", /^pin "#{package}".*$/, pin, verbose: false)
Expand Down
16 changes: 13 additions & 3 deletions lib/importmap/packager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ def pin_for(package, url)
%(pin "#{package}", to: "#{url}")
end

def vendored_pin_for(package, url)
def vendored_pin_for(package, url, preloads = nil)
filename = package_filename(package)
version = extract_package_version_from(url)

if "#{package}.js" == filename
%(pin "#{package}" # #{version})
%(pin "#{package}"#{preload(preloads)} # #{version})
else
%(pin "#{package}", to: "#{filename}" # #{version})
%(pin "#{package}", to: "#{filename}"#{preload(preloads)} # #{version})
end
end

Expand All @@ -63,6 +63,16 @@ def remove(package)
end

private
def preload(preloads)
case Array(preloads)
in [] then ""
in ["true"] then %(, preload: true)
in ["false"] then %(, preload: false)
in [string] then %(, preload: "#{string}")
else %(, preload: #{preloads})
end
end

def post_json(body)
Net::HTTP.post(self.class.endpoint, body.to_json, "Content-Type" => "application/json")
rescue => error
Expand Down
12 changes: 10 additions & 2 deletions test/installer_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,21 @@ def with_new_rails_app
Rails::Generators::AppGenerator.start([app_dir, "--quiet", "--skip-bundle", "--skip-bootsnap"])

Dir.chdir(app_dir) do
if Rails::VERSION::PRE == "alpha" && Gem.loaded_specs["sprockets-rails"]
FileUtils.mkdir_p("app/assets/config")
File.write("app/assets/config/manifest.js", "")
end

gemfile = File.read("Gemfile")
gemfile.gsub!(/^gem "importmap-rails".*/, "")
gemfile << %(gem "importmap-rails", path: #{File.expand_path("..", __dir__).inspect}\n)
if Gem.loaded_specs["rails"].version < Gem::Version.new("7.1")
gemfile << %(gem "concurrent-ruby", "1.3.4"\n)
end
if Rails::VERSION::PRE == "alpha"
gemfile.gsub!(/^gem "rails".*/, "")
gemfile << %(gem "rails", path: #{Gem.loaded_specs["rails"].full_gem_path.inspect}\n)
end
gemfile.gsub!(/^gem "importmap-rails".*/, "")
gemfile << %(gem "importmap-rails", path: #{File.expand_path("..", __dir__).inspect}\n)
File.write("Gemfile", gemfile)

run_command("bundle", "install")
Expand Down
4 changes: 4 additions & 0 deletions test/packager_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,9 @@ def code() "200" end
test "vendored_pin_for" do
assert_equal %(pin "react" # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]")
assert_equal %(pin "javascript/react", to: "javascript--react.js" # @17.0.2), @packager.vendored_pin_for("javascript/react", "https://cdn/[email protected]")
assert_equal %(pin "react", preload: true # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]", ["true"])
assert_equal %(pin "react", preload: false # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]", ["false"])
assert_equal %(pin "react", preload: "foo" # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]", ["foo"])
assert_equal %(pin "react", preload: ["foo", "bar"] # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]", ["foo", "bar"])
end
end