require ‘fileutils’

namespace :npm do

desc "Install npm packages"
task :install do
  package_file = ::Rails.configuration.npm.package_file
  browserify_options = ::Rails.configuration.npm.browserify_options
  output_path = ::Rails.root.join(::Rails.configuration.npm.output_path)
  output_file = "npm-dependencies.js"
  output_file_path = output_path.join(output_file)

  Npm::Rails::TaskHelpers.create_file(output_path, output_file) unless File.exist?(output_file_path)

  Npm::Rails::PackageBundler.bundle(::Rails.root, package_file, ::Rails.env) do |packages, bundle_file_path|
    sh "npm install --prefix #{ ::Rails.root } --loglevel error #{ packages }"

    browserify = Npm::Rails::TaskHelpers.find_browserify(::Rails.root.join("node_modules"))
    browserify_command = "#{ browserify } #{ browserify_options } #{ bundle_file_path } > #{ output_file_path }"
    if Rails.env.production?
      browserify_command = "NODE_ENV=production #{ browserify_command }"
    end

    sh browserify_command
  end
end

end

if ::Rails.configuration.npm.run_before_assets_precompile

task "assets:precompile" => ["npm:install"]

end