Skip to content

Commit

Permalink
Add a packages command to get package info (#178)
Browse files Browse the repository at this point in the history
  • Loading branch information
dkniffin committed Apr 28, 2023
1 parent bbb5493 commit c7b9e13
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
7 changes: 6 additions & 1 deletion lib/importmap/commands.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class Importmap::Commands < Thor
def self.exit_on_failure?
false
end

desc "pin [*PACKAGES]", "Pin new packages"
option :env, type: :string, aliases: :e, default: "production"
option :from, type: :string, aliases: :f, default: "jspm"
Expand Down Expand Up @@ -103,6 +103,11 @@ def outdated
end
end

desc "packages", "Print out packages with version numbers"
def packages
puts npm.packages_with_versions.map { |x| x.join(' ') }
end

private
def packager
@packager ||= Importmap::Packager.new
Expand Down
14 changes: 8 additions & 6 deletions lib/importmap/npm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,19 @@ def vulnerable_packages
end.sort_by { |p| [p.name, p.severity] }
end

def packages_with_versions
# We cannot use the name after "pin" because some dependencies are loaded from inside packages
# Eg. pin "buffer", to: "https://ga.jspm.io/npm:@jspm/core@2.0.0-beta.19/nodelibs/browser/buffer.js"

importmap.scan(/^pin .*(?<=npm:|npm\/|skypack\.dev\/|unpkg\.com\/)(.*)(?=@\d+\.\d+\.\d+)@(\d+\.\d+\.\d+(?:[^\/\s"]*)).*$/) |
importmap.scan(/^pin "([^"]*)".* #.*@(\d+\.\d+\.\d+(?:[^\s]*)).*$/)
end

private
OutdatedPackage = Struct.new(:name, :current_version, :latest_version, :error, keyword_init: true)
VulnerablePackage = Struct.new(:name, :severity, :vulnerable_versions, :vulnerability, keyword_init: true)

def packages_with_versions
# We cannot use the name after "pin" because some dependencies are loaded from inside packages
# Eg. pin "buffer", to: "https://ga.jspm.io/npm:@jspm/core@2.0.0-beta.19/nodelibs/browser/buffer.js"

importmap.scan(/^pin .*(?<=npm:|npm\/|skypack\.dev\/|unpkg\.com\/)(.*)(?=@\d+\.\d+\.\d+)@(\d+\.\d+\.\d+(?:[^\/\s"]*)).*$/) |
importmap.scan(/^pin "([^"]*)".* #.*@(\d+\.\d+\.\d+(?:[^\s]*)).*$/)
end

def importmap
@importmap ||= File.read(@importmap_path)
Expand Down

0 comments on commit c7b9e13

Please sign in to comment.