class Condenser::UglifyMinifier

Public Class Methods

new(dir, options = {}) click to toggle source
Calls superclass method Condenser::NodeProcessor::new
# File lib/condenser/minifiers/uglify_minifier.rb, line 6
def initialize(dir, options = {})
  super(dir)
  npm_install('uglify-js')
  
  @options = options.merge({
    warnings: true
  }).freeze
end

Public Instance Methods

call(environment, input) click to toggle source
# File lib/condenser/minifiers/uglify_minifier.rb, line 15
  def call(environment, input)
    opts = {
      # 'moduleRoot' => nil,
      # 'filename' => input[:filename],
      # 'moduleId' => input[:filename].sub(/(\..+)+/, ''),
      # 'filenameRelative' => input[:filename],#split_subpath(input[:load_path], input[:filename]),
      # 'sourceFileName' => input[:filename],
      # 'sourceMapTarget' => input[:filename]
      # # 'inputSourceMap'
    }.merge(@options)
    
    result = exec_runtime(<<-JS)
      const UglifyJS = require("#{npm_module_path('uglify-js')}");
      const source = #{JSON.generate(input[:filename] => input[:source])}
      const options = #{JSON.generate(opts)};

      // {
      //     sourceMap: {
      //         content: "content from compiled.js.map",
      //         url: "minified.js.map"
      //     }
      // });
      
      try {
        var result = UglifyJS.minify(source, options);
        console.log(JSON.stringify(result));
      } catch(e) {
        console.log(JSON.stringify({'error': e.name + ": " + e.message}));
        process.exit(1);
      }
    JS

    raise Error, result['error'] if result['error']
    
    if result['warnings']
      result['warnings'].each { |w| environment.logger.warn(w) }
    end
    
    input[:source] = result['code']
    input[:map] = result['map']
  end