importmap-rails 0.7.6 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +85 -14
- data/app/assets/javascripts/es-module-shims.js +27 -25
- data/app/assets/javascripts/es-module-shims.js.map +1 -0
- data/app/assets/javascripts/es-module-shims.min.js +3 -0
- data/app/helpers/importmap/importmap_tags_helper.rb +3 -3
- data/lib/importmap/commands.rb +23 -7
- data/lib/importmap/engine.rb +21 -5
- data/lib/importmap/map.rb +13 -5
- data/lib/importmap/packager.rb +84 -9
- data/lib/importmap/reloader.rb +1 -1
- data/lib/importmap/version.rb +1 -1
- data/lib/install/config/importmap.rb +2 -5
- data/lib/install/install.rb +6 -1
- metadata +10 -8
data/lib/importmap/packager.rb
CHANGED
@@ -10,8 +10,11 @@ class Importmap::Packager
|
|
10
10
|
singleton_class.attr_accessor :endpoint
|
11
11
|
self.endpoint = URI("https://api.jspm.io/generate")
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
attr_reader :vendor_path
|
14
|
+
|
15
|
+
def initialize(importmap_path = "config/importmap.rb", vendor_path: "vendor/javascript")
|
16
|
+
@importmap_path = Pathname.new(importmap_path)
|
17
|
+
@vendor_path = Pathname.new(vendor_path)
|
15
18
|
end
|
16
19
|
|
17
20
|
def import(*packages, env: "production", from: "jspm")
|
@@ -33,15 +36,43 @@ class Importmap::Packager
|
|
33
36
|
%(pin "#{package}", to: "#{url}")
|
34
37
|
end
|
35
38
|
|
39
|
+
def vendored_pin_for(package, url)
|
40
|
+
filename = package_filename(package)
|
41
|
+
version = extract_package_version_from(url)
|
42
|
+
|
43
|
+
if "#{package}.js" == filename
|
44
|
+
%(pin "#{package}" # #{version})
|
45
|
+
else
|
46
|
+
%(pin "#{package}", to: "#{filename}" # #{version})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
36
50
|
def packaged?(package)
|
37
51
|
importmap.match(/^pin "#{package}".*$/)
|
38
52
|
end
|
39
53
|
|
54
|
+
def download(package, url)
|
55
|
+
ensure_vendor_directory_exists
|
56
|
+
remove_existing_package_file(package)
|
57
|
+
download_package_file(package, url)
|
58
|
+
end
|
59
|
+
|
60
|
+
def remove(package)
|
61
|
+
remove_existing_package_file(package)
|
62
|
+
remove_package_from_importmap(package)
|
63
|
+
end
|
64
|
+
|
40
65
|
private
|
66
|
+
def post_json(body)
|
67
|
+
Net::HTTP.post(self.class.endpoint, body.to_json, "Content-Type" => "application/json")
|
68
|
+
rescue => error
|
69
|
+
raise HTTPError, "Unexpected transport error (#{error.class}: #{error.message})"
|
70
|
+
end
|
71
|
+
|
41
72
|
def extract_parsed_imports(response)
|
42
73
|
JSON.parse(response.body).dig("map", "imports")
|
43
74
|
end
|
44
|
-
|
75
|
+
|
45
76
|
def handle_failure_response(response)
|
46
77
|
if error_message = parse_service_error(response)
|
47
78
|
raise ServiceError, error_message
|
@@ -56,13 +87,57 @@ class Importmap::Packager
|
|
56
87
|
nil
|
57
88
|
end
|
58
89
|
|
59
|
-
def post_json(body)
|
60
|
-
Net::HTTP.post(self.class.endpoint, body.to_json, { "Content-Type" => "application/json" })
|
61
|
-
rescue => error
|
62
|
-
raise HTTPError, "Unexpected transport error (#{error.class}: #{error.message})"
|
63
|
-
end
|
64
|
-
|
65
90
|
def importmap
|
66
91
|
@importmap ||= File.read(@importmap_path)
|
67
92
|
end
|
93
|
+
|
94
|
+
|
95
|
+
def ensure_vendor_directory_exists
|
96
|
+
FileUtils.mkdir_p @vendor_path
|
97
|
+
end
|
98
|
+
|
99
|
+
def remove_existing_package_file(package)
|
100
|
+
FileUtils.rm_rf vendored_package_path(package)
|
101
|
+
end
|
102
|
+
|
103
|
+
def remove_package_from_importmap(package)
|
104
|
+
all_lines = File.readlines(@importmap_path)
|
105
|
+
with_lines_removed = all_lines.select { |line| line !~ /pin "#{package}"/ }
|
106
|
+
|
107
|
+
File.open(@importmap_path, "w") do |file|
|
108
|
+
with_lines_removed.each { |line| file.write(line) }
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def download_package_file(package, url)
|
113
|
+
response = Net::HTTP.get_response(URI(url))
|
114
|
+
|
115
|
+
if response.code == "200"
|
116
|
+
save_vendored_package(package, response.body)
|
117
|
+
else
|
118
|
+
handle_failure_response(response)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def save_vendored_package(package, source)
|
123
|
+
File.open(vendored_package_path(package), "w+") do |vendored_package|
|
124
|
+
vendored_package.write remove_sourcemap_comment_from(source).force_encoding("UTF-8")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def remove_sourcemap_comment_from(source)
|
129
|
+
source.gsub(/^\/\/# sourceMappingURL=.*/, "")
|
130
|
+
end
|
131
|
+
|
132
|
+
def vendored_package_path(package)
|
133
|
+
@vendor_path.join(package_filename(package))
|
134
|
+
end
|
135
|
+
|
136
|
+
def package_filename(package)
|
137
|
+
package.gsub("/", "--") + ".js"
|
138
|
+
end
|
139
|
+
|
140
|
+
def extract_package_version_from(url)
|
141
|
+
url.match(/@\d+\.\d+\.\d+/)&.to_a&.first
|
142
|
+
end
|
68
143
|
end
|
data/lib/importmap/reloader.rb
CHANGED
data/lib/importmap/version.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
#
|
2
|
-
# pin "@rails/activestorage", to: "activestorage.esm.js"
|
1
|
+
# Pin npm packages by running ./bin/importmap
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
pin "application"
|
3
|
+
pin "application", preload: true
|
data/lib/install/install.rb
CHANGED
@@ -14,9 +14,14 @@ create_file Rails.root.join("app/javascript/application.js") do <<-JS
|
|
14
14
|
JS
|
15
15
|
end
|
16
16
|
|
17
|
+
say "Use vendor/javascript for downloaded pins"
|
18
|
+
empty_directory "vendor/javascript"
|
19
|
+
keep_file "vendor/javascript"
|
20
|
+
|
17
21
|
if (sprockets_manifest_path = Rails.root.join("app/assets/config/manifest.js")).exist?
|
18
22
|
say "Ensure JavaScript files are in the Sprocket manifest"
|
19
|
-
append_to_file sprockets_manifest_path,
|
23
|
+
append_to_file sprockets_manifest_path,
|
24
|
+
%(//= link_tree ../../javascript .js\n//= link_tree ../../../vendor/javascript .js\n)
|
20
25
|
end
|
21
26
|
|
22
27
|
say "Configure importmap paths in config/importmap.rb"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: importmap-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 6.0.0
|
27
|
-
description:
|
27
|
+
description:
|
28
28
|
email: david@loudthinking.com
|
29
29
|
executables: []
|
30
30
|
extensions: []
|
@@ -34,6 +34,8 @@ files:
|
|
34
34
|
- README.md
|
35
35
|
- Rakefile
|
36
36
|
- app/assets/javascripts/es-module-shims.js
|
37
|
+
- app/assets/javascripts/es-module-shims.js.map
|
38
|
+
- app/assets/javascripts/es-module-shims.min.js
|
37
39
|
- app/helpers/importmap/importmap_tags_helper.rb
|
38
40
|
- lib/importmap-rails.rb
|
39
41
|
- lib/importmap/commands.rb
|
@@ -53,7 +55,7 @@ licenses:
|
|
53
55
|
metadata:
|
54
56
|
homepage_uri: https://github.com/rails/importmap-rails
|
55
57
|
source_code_uri: https://github.com/rails/importmap-rails
|
56
|
-
post_install_message:
|
58
|
+
post_install_message:
|
57
59
|
rdoc_options: []
|
58
60
|
require_paths:
|
59
61
|
- lib
|
@@ -61,15 +63,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
63
|
requirements:
|
62
64
|
- - ">="
|
63
65
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
66
|
+
version: 2.7.0
|
65
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
68
|
requirements:
|
67
69
|
- - ">="
|
68
70
|
- !ruby/object:Gem::Version
|
69
71
|
version: '0'
|
70
72
|
requirements: []
|
71
|
-
rubygems_version: 3.
|
72
|
-
signing_key:
|
73
|
+
rubygems_version: 3.2.22
|
74
|
+
signing_key:
|
73
75
|
specification_version: 4
|
74
76
|
summary: Use ESM with importmap to manage modern JavaScript in Rails without transpiling
|
75
77
|
or bundling.
|