namespace :webpacker do

desc "Verifies if Yarn is installed"
task :check_yarn do
  begin
    yarn_version = `yarn --version`
    raise Errno::ENOENT if yarn_version.blank?

    pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
    yarn_requirement = JSON.parse(pkg_path.read)["engines"]["yarn"]

    requirement = Gem::Requirement.new(yarn_requirement)
    version = Gem::Version.new(yarn_version)

    unless requirement.satisfied_by?(version)
      $stderr.puts "Webpacker requires Yarn #{requirement} and you are using #{version}"
      $stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
      $stderr.puts "Exiting!" && exit!
    end
  rescue Errno::ENOENT
    $stderr.puts "Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/"
    $stderr.puts "Exiting!" && exit!
  end
end

end