Refresh

This website preview.rubydoc.info/gems/license_finder/7.1.0/LicenseFinder/PNPM is currently offline. Cloudflare\'s Always Online™ shows a snapshot of this web page from the Internet Archive\'s Wayback Machine. To check for the live version, click Refresh.

Class: LicenseFinder::PNPM

Inherits:
PackageManager show all
Defined in:
lib/license_finder/package_managers/pnpm.rb

Constant Summary collapse

SHELL_COMMAND =
'pnpm licenses list --json --long'

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from PackageManager

#active?, #command_exists?, #current_packages_with_relations, #detected_package_path, id, #installed?, #project_root?

Constructor Details

#initialize(options = {}) ⇒ PNPM

Returns a new instance of PNPM.



8
9
10
11
# File 'lib/license_finder/package_managers/pnpm.rb', line 8

def initialize(options = {})
  super
  @pnpm_options = options[:pnpm_options]
end

Class Method Details

.takes_priority_overObject



19
20
21
# File 'lib/license_finder/package_managers/pnpm.rb', line 19

def self.takes_priority_over
  NPM
end

Instance Method Details

#current_packagesObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/license_finder/package_managers/pnpm.rb', line 23

def current_packages
  # check if the minimum version of PNPM is met
  raise 'The minimum PNPM version is not met, requires 7.17.0 or later' unless supported_pnpm?

  # check if the project directory has workspace file
  cmd = PNPM::SHELL_COMMAND.to_s
  cmd += ' --no-color'
  cmd += ' --recursive' unless project_has_workspaces == false
  cmd += " --dir #{project_path}" unless project_path.nil?
  cmd += " #{@pnpm_options}" unless @pnpm_options.nil?

  stdout, stderr, status = Cmd.run(cmd)
  raise "Command '#{cmd}' failed to execute: #{stderr}" unless status.success?

  json_objects = JSON.parse(stdout)
  get_pnpm_packages(json_objects)
end

#get_pnpm_packages(json_objects) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/license_finder/package_managers/pnpm.rb', line 41

def get_pnpm_packages(json_objects)
  packages = []
  incompatible_packages = []

  json_objects.map do |_, value|
    value.each do |pkg|
      name = pkg['name']
      version = pkg['version']
      license = pkg['license']
      homepage = pkg['vendorUrl']
      author = pkg['vendorName']
      module_path = pkg['path']

      package = PNPMPackage.new(
        name,
        version,
        spec_licenses: [license],
        homepage: homepage,
        authors: author,
        install_path: module_path
      )
      packages << package
    end
  end

  packages + incompatible_packages.uniq
end

#package_management_commandObject



69
70
71
# File 'lib/license_finder/package_managers/pnpm.rb', line 69

def package_management_command
  'pnpm'
end

#possible_package_pathsObject



15
16
17
# File 'lib/license_finder/package_managers/pnpm.rb', line 15

def possible_package_paths
  [project_path.join('pnpm-lock.yaml')]
end

#prepareObject



77
78
79
80
81
82
83
84
85
# File 'lib/license_finder/package_managers/pnpm.rb', line 77

def prepare
  prep_cmd = "#{prepare_command}#{production_flag}"
  _stdout, stderr, status = Dir.chdir(project_path) { Cmd.run(prep_cmd) }

  return if status.success?

  log_errors stderr
  raise "Prepare command '#{prep_cmd}' failed" unless @prepare_no_fail
end

#prepare_commandObject



73
74
75
# File 'lib/license_finder/package_managers/pnpm.rb', line 73

def prepare_command
  'pnpm install --no-lockfile --ignore-scripts'
end