namespace :yarn do
  desc 'Ensure Yarn is installed'
  task :available do
    unless system('yarn --version', out: File::NULL)
      warn(
        'Error: Yarn executable was not detected in the system.'.color(:red),
        'Download Yarn at https://yarnpkg.com/en/docs/install'.color(:green)
      )
      abort
    end
  end

  desc 'Ensure Node dependencies are installed'
  task check: ['yarn:available'] do
    unless system('yarn check --ignore-engines', out: File::NULL)
      warn(
        'Error: You have unmet dependencies. (`yarn check` command failed)'.color(:red),
        'Run `yarn install` to install missing modules.'.color(:green)
      )
      abort
    end
  end

  desc 'Install Node dependencies with Yarn'
  task install: ['yarn:available'] do
    unless system('yarn install --pure-lockfile --ignore-engines')
      abort 'Error: Unable to install node modules.'.color(:red)
    end
  end

  desc 'Remove Node dependencies'
  task :clobber do
    warn 'Purging ./node_modules directory'.color(:red)
    FileUtils.rm_rf 'node_modules'
  end
end

desc 'Install Node dependencies with Yarn'
task yarn: ['yarn:install']