importmap-node 0.1.0 → 0.1.2
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/lib/importmap/node/installer.rb +55 -22
- data/lib/importmap/node/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a600199932a9709489532ba6697f1d923fc81291f12b3af30ea53766804b4bb0
|
|
4
|
+
data.tar.gz: 5aeeeb117182c6e7316974ddf486416cb334bc007062ebfd1dda76b84601457f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b785eea53cd09a655ea133038592dff31f1406252896cdd76c0d6b1bb4f7f69df3f74f48d2ccc3d2c58086746a4c0fb7390af2a40b7e9755a680f0e07558f7e2
|
|
7
|
+
data.tar.gz: 784c868a3e81b623f1b3d1845774d5783878e0d375bbd60d053013319ac4d4433a89c8b0b1b3e19755f98abc737aea20e503108175ee0a85eefca865d245696b
|
|
@@ -17,9 +17,8 @@ module Importmap
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def install(package)
|
|
20
|
-
yarn_add(package)
|
|
21
|
-
|
|
22
|
-
pkg_name = resolve_package_name(package)
|
|
20
|
+
resolved_name = yarn_add(package)
|
|
21
|
+
pkg_name = resolved_name || resolve_package_name(package)
|
|
23
22
|
pkg_meta = read_package_meta(pkg_name)
|
|
24
23
|
js_files = vendor_js(pkg_name, pkg_meta)
|
|
25
24
|
pin_importmap(pkg_name, js_files)
|
|
@@ -55,17 +54,26 @@ module Importmap
|
|
|
55
54
|
private
|
|
56
55
|
|
|
57
56
|
def yarn_add(package)
|
|
58
|
-
|
|
59
|
-
path = package.sub(/^file:/, '')
|
|
60
|
-
local_pkg_json = File.expand_path(File.join(path, 'package.json'), @root.to_s)
|
|
61
|
-
name = JSON.parse(File.read(local_pkg_json))['name']
|
|
62
|
-
"#{name}@#{package}"
|
|
63
|
-
else
|
|
64
|
-
package
|
|
65
|
-
end
|
|
57
|
+
return yarn_add_repo(package) if repo_url?(package)
|
|
66
58
|
|
|
59
|
+
yarn_arg = package.start_with?('file:') ? file_package_arg(package) : package
|
|
67
60
|
puts "Running: yarn add #{yarn_arg}"
|
|
68
61
|
system("yarn add #{yarn_arg}", chdir: @root.to_s) or raise "yarn add failed for #{package}"
|
|
62
|
+
nil
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def yarn_add_repo(package)
|
|
66
|
+
deps_before = current_dependencies.keys
|
|
67
|
+
puts "Running: yarn add #{package}"
|
|
68
|
+
system("yarn add #{package}", chdir: @root.to_s) or raise "yarn add failed for #{package}"
|
|
69
|
+
new_keys = current_dependencies.keys - deps_before
|
|
70
|
+
raise "Could not determine package name after yarn add #{package}" if new_keys.empty?
|
|
71
|
+
|
|
72
|
+
new_keys.first
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def file_package_arg(package)
|
|
76
|
+
"#{local_package_name(package)}@#{package}"
|
|
69
77
|
end
|
|
70
78
|
|
|
71
79
|
def yarn_remove(pkg_name)
|
|
@@ -82,6 +90,20 @@ module Importmap
|
|
|
82
90
|
system("yarn up #{deps.join(' ')}", chdir: @root.to_s) or raise 'yarn up failed'
|
|
83
91
|
end
|
|
84
92
|
|
|
93
|
+
def repo_url?(package)
|
|
94
|
+
return false if package.start_with?('file:')
|
|
95
|
+
|
|
96
|
+
package.match?(%r{\Ahttps?://|\Agit[+:]|\Agithub:|\Abitbucket:|\Agitlab:}) ||
|
|
97
|
+
(!package.start_with?('@') && package.include?('/'))
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def current_dependencies
|
|
101
|
+
pkg_json = @root.join('package.json')
|
|
102
|
+
return {} unless pkg_json.exist?
|
|
103
|
+
|
|
104
|
+
JSON.parse(pkg_json.read).fetch('dependencies', {})
|
|
105
|
+
end
|
|
106
|
+
|
|
85
107
|
def revendor(package)
|
|
86
108
|
pkg_name = resolve_package_name(package)
|
|
87
109
|
pkg_meta = read_package_meta(pkg_name)
|
|
@@ -91,13 +113,22 @@ module Importmap
|
|
|
91
113
|
end
|
|
92
114
|
|
|
93
115
|
def resolve_package_name(package)
|
|
94
|
-
if package.start_with?('file:')
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
116
|
+
return local_package_name(package) if package.start_with?('file:')
|
|
117
|
+
return repo_package_name(package) if repo_url?(package)
|
|
118
|
+
|
|
119
|
+
package
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def local_package_name(package)
|
|
123
|
+
path = package.sub(/^file:/, '')
|
|
124
|
+
local_pkg_json = File.expand_path(File.join(path, 'package.json'), @root.to_s)
|
|
125
|
+
JSON.parse(File.read(local_pkg_json))['name']
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def repo_package_name(package)
|
|
129
|
+
deps = current_dependencies
|
|
130
|
+
match = deps.find { |_name, spec| spec == package || spec.include?(package) || package.include?(spec) }
|
|
131
|
+
match ? match.first : package
|
|
101
132
|
end
|
|
102
133
|
|
|
103
134
|
def read_package_meta(pkg_name)
|
|
@@ -138,12 +169,14 @@ module Importmap
|
|
|
138
169
|
def pin_importmap(pkg_name, js_files)
|
|
139
170
|
return if js_files.empty? || !@importmap.exist?
|
|
140
171
|
|
|
141
|
-
content = @importmap.read
|
|
142
172
|
pin_line = "pin \"#{pkg_name}\", to: \"#{js_files.first}\""
|
|
173
|
+
write_pin(pkg_name, pin_line)
|
|
174
|
+
end
|
|
143
175
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
176
|
+
def write_pin(pkg_name, pin_line)
|
|
177
|
+
content = @importmap.read
|
|
178
|
+
if content.match?(/pin ['"]{1}#{Regexp.escape(pkg_name)}['"]{1}/)
|
|
179
|
+
@importmap.write(content.gsub(/pin ['"]{1}#{Regexp.escape(pkg_name)}['"]{1}[^\n]*/, pin_line))
|
|
147
180
|
puts " Updated pin: #{pin_line}"
|
|
148
181
|
else
|
|
149
182
|
@importmap.open('a') { |f| f.puts pin_line }
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: importmap-node
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tien
|
|
@@ -53,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
requirements: []
|
|
56
|
-
rubygems_version:
|
|
56
|
+
rubygems_version: 3.6.9
|
|
57
57
|
specification_version: 4
|
|
58
58
|
summary: Install node packages as vendored assets in Rails via yarn
|
|
59
59
|
test_files: []
|