class Condenser::TerserMinifier
Public Class Methods
new(dir, options = {})
click to toggle source
Calls superclass method
Condenser::NodeProcessor::new
# File lib/condenser/minifiers/terser_minifier.rb, line 3 def initialize(dir, options = {}) super(dir) npm_install('terser') @options = options.merge({ keep_classnames: true, keep_fnames: true }).freeze end
Public Instance Methods
call(environment, input)
click to toggle source
# File lib/condenser/minifiers/terser_minifier.rb, line 13 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 Terser = require("#{npm_module_path('terser')}"); const source = #{JSON.generate(input[:filename] => input[:source])} const options = #{JSON.generate(opts)}; Terser.minify(source, options).then((result) => { console.log(JSON.stringify(result)); }, (error) => { console.log(JSON.stringify({'error': error.name + ": " + error.message})); process.exit(1); }); JS exec_runtime_error(result['error']) if result['error'] result['warnings']&.each { |w| environment.logger.warn(w) } input[:source] = result['code'] input[:map] = result['map'] end