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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c5646881534b9345ec18f89096877bdf2997a54eff2ca7d398a11e7031c6cac
4
- data.tar.gz: b3fb276ee1463143206de177a6b3913377980be5c4bde3e26e9da7f92b07aadb
3
+ metadata.gz: a600199932a9709489532ba6697f1d923fc81291f12b3af30ea53766804b4bb0
4
+ data.tar.gz: 5aeeeb117182c6e7316974ddf486416cb334bc007062ebfd1dda76b84601457f
5
5
  SHA512:
6
- metadata.gz: 63a5f385846268bb9a4c059b2cd35371e9bd87d28f599993da8976c9de9971506e4591fda0f2680e87671e0602771b88d6d5141faa967cab8529eb1f0c8fbe60
7
- data.tar.gz: fa5b2dacbd647fa39e5860ac179ecc9e92eb2b1a06c225c3bd2e3709230ac1e5ecb4cba87733797c2adb25ed40931a831471f5fb80afaf4842ef67b530cf57c2
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
- yarn_arg = if package.start_with?('file:')
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
- path = package.sub(/^file:/, '')
96
- local_pkg_json = File.expand_path(File.join(path, 'package.json'), @root.to_s)
97
- JSON.parse(File.read(local_pkg_json))['name']
98
- else
99
- package
100
- end
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
- if content.match?(/pin ['"]#{Regexp.escape(pkg_name)}['"]/)
145
- new_content = content.gsub(/pin ['"]#{Regexp.escape(pkg_name)}['"][^\n]*/, pin_line)
146
- @importmap.write(new_content)
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 }
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Importmap
4
4
  module Node
5
- VERSION = '0.1.0'
5
+ VERSION = '0.1.2'
6
6
  end
7
7
  end
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.0
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: 4.0.7
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: []