module SvelteOnRails::Installer::Npm

def self.install_or_update_package(package_name, minimal_version: nil, update_to_latest: true)

def self.install_or_update_package(package_name, minimal_version: nil, update_to_latest: true)
  pkg = inspect_package(package_name)
  to_do = !check_version((pkg ? pkg[:version] : nil), minimal_version)
  if to_do
    cmd = if update_to_latest
            "npm install #{package_name}@latest"
          else
            raise "ERROR: not implemented"
          end
    stdout, stderr, status = Open3.capture3(cmd)
    if stderr.present?
      raise "ERROR #{cmd} => #{stderr}"
    end
    notice = [
      (pkg ? "Updated" : "Installed"),
      package_name,
      (pkg ? "from version #{pkg[:version].join('.')}" : nil),
      (pkg ? "to" : nil),
      "@latest"
    ].compact.join(' ')
    puts notice
  else
    min_str = minimal_version.present? ? ", required: >= #{minimal_version.join('.')}" : ''
    puts "#{package_name} already installed (#{pkg[:version].join('.')}#{min_str}), skipping."
  end
end