Skip to content

Commit 8a5218f

Browse files
committed
Add --preload option to pin command
1 parent 77553c7 commit 8a5218f

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

lib/importmap/commands.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ def self.exit_on_failure?
1212
desc "pin [*PACKAGES]", "Pin new packages"
1313
option :env, type: :string, aliases: :e, default: "production"
1414
option :from, type: :string, aliases: :f, default: "jspm"
15+
option :preload, type: :string, repeatable: true, desc: "Can be used multiple times"
1516
def pin(*packages)
1617
if imports = packager.import(*packages, env: options[:env], from: options[:from])
1718
imports.each do |package, url|
1819
puts %(Pinning "#{package}" to #{packager.vendor_path}/#{package}.js via download from #{url})
1920
packager.download(package, url)
20-
pin = packager.vendored_pin_for(package, url)
21+
pin = packager.vendored_pin_for(package, url, options[:preload])
2122

2223
if packager.packaged?(package)
2324
gsub_file("config/importmap.rb", /^pin "#{package}".*$/, pin, verbose: false)

lib/importmap/packager.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ def pin_for(package, url)
3636
%(pin "#{package}", to: "#{url}")
3737
end
3838

39-
def vendored_pin_for(package, url)
39+
def vendored_pin_for(package, url, preloads = nil)
4040
filename = package_filename(package)
4141
version = extract_package_version_from(url)
4242

4343
if "#{package}.js" == filename
44-
%(pin "#{package}" # #{version})
44+
%(pin "#{package}"#{preload(preloads)} # #{version})
4545
else
46-
%(pin "#{package}", to: "#{filename}" # #{version})
46+
%(pin "#{package}", to: "#{filename}"#{preload(preloads)} # #{version})
4747
end
4848
end
4949

@@ -63,6 +63,16 @@ def remove(package)
6363
end
6464

6565
private
66+
def preload(preloads)
67+
case Array(preloads)
68+
in [] then ""
69+
in ["true"] then %(, preload: true)
70+
in ["false"] then %(, preload: false)
71+
in [string] then %(, preload: "#{string}")
72+
else %(, preload: #{preloads})
73+
end
74+
end
75+
6676
def post_json(body)
6777
Net::HTTP.post(self.class.endpoint, body.to_json, "Content-Type" => "application/json")
6878
rescue => error

test/packager_test.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,9 @@ def code() "200" end
5454
test "vendored_pin_for" do
5555
assert_equal %(pin "react" # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]")
5656
assert_equal %(pin "javascript/react", to: "javascript--react.js" # @17.0.2), @packager.vendored_pin_for("javascript/react", "https://cdn/[email protected]")
57+
assert_equal %(pin "react", preload: true # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]", ["true"])
58+
assert_equal %(pin "react", preload: false # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]", ["false"])
59+
assert_equal %(pin "react", preload: "foo" # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]", ["foo"])
60+
assert_equal %(pin "react", preload: ["foo", "bar"] # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/[email protected]", ["foo", "bar"])
5761
end
5862
end

0 commit comments

Comments
 (0)