lib/uglifier.rb in uglifier-3.0.1 vs lib/uglifier.rb in uglifier-3.0.2

- old
+ new

@@ -43,11 +43,12 @@ :mangle => { :eval => false, # Mangle names when eval of when is used in scope :except => ["$super"], # Argument names to be excluded from mangling :sort => false, # Assign shorter names to most frequently used variables. Often results in bigger output after gzip. :toplevel => false, # Mangle names declared in the toplevel scope - :properties => false # Mangle property names + :properties => false, # Mangle property names + :keep_fnames => false # Do not modify function names }, # Mangle variable and function names, set to false to skip mangling :mangle_properties => false, # Mangle property names :compress => { :sequences => true, # Allow statements to be joined by commas :properties => true, # Rewrite property access using the dot notation @@ -70,14 +71,15 @@ :pure_getters => false, # Assume that object property access does not have any side-effects :pure_funcs => nil, # List of functions without side-effects. Can safely discard function calls when the result value is not used :drop_console => false, # Drop calls to console.* functions :angular => false, # Process @ngInject annotations :keep_fargs => false, # Preserve unused function arguments - :keep_fnames => false # Preserve function names + :keep_fnames => false # Do not drop names in function definitions }, # Apply transformations to code, set to false to skip :define => {}, # Define values for symbol replacement :enclose => false, # Enclose in output function wrapper, define replacements as key-value pairs + :keep_fnames => false, # Generate code safe for the poor souls relying on Function.prototype.name at run-time. Sets both compress and mangle keep_fanems to true. :screw_ie8 => false, # Don't bother to generate safe code for IE8 :source_map => false # Generate source map } LEGACY_OPTIONS = [:comments, :squeeze, :copyright, :mangle] @@ -186,12 +188,20 @@ source.to_s end end def mangle_options - mangle_options = @options.fetch(:mangle, @options[:mangle]) - conditional_option(mangle_options, DEFAULTS[:mangle]) + defaults = conditional_option( + DEFAULTS[:mangle], + :keep_fnames => keep_fnames?(:mangle) + ) + + conditional_option( + @options.fetch(:mangle, DEFAULTS[:mangle]), + defaults, + :keep_fnames => keep_fnames?(:mangle) + ) end def mangle_properties_options mangle_options = @options.fetch(:mangle_properties, DEFAULTS[:mangle_properties]) options = conditional_option(mangle_options, MANGLE_PROPERTIES_DEFAULTS) @@ -206,11 +216,16 @@ defaults = conditional_option( DEFAULTS[:compress], :global_defs => @options[:define] || {}, :screw_ie8 => screw_ie8? ) - conditional_option(@options[:compress] || @options[:squeeze], defaults) + + conditional_option( + @options[:compress] || @options[:squeeze], + defaults, + :keep_fnames => keep_fnames?(:compress) + ) end def comment_options case comment_setting when :all, true @@ -251,10 +266,19 @@ else @options.fetch(:screw_ie8, DEFAULTS[:screw_ie8]) end end + def keep_fnames?(type) + if @options[:keep_fnames] || DEFAULTS[:keep_fnames] + true + else + @options[type].respond_to?(:[]) && @options[type][:keep_fnames] || + DEFAULTS[type].respond_to?(:[]) && DEFAULTS[type][:keep_fnames] + end + end + def source_map_options(input_map) options = conditional_option(@options[:source_map], SOURCE_MAP_DEFAULTS) { :file => options[:output_filename], @@ -292,14 +316,14 @@ end [regexp.source, modifiers] end - def conditional_option(value, defaults) + def conditional_option(value, defaults, overrides = {}) if value == true || value.nil? - defaults + defaults.merge(overrides) elsif value - defaults.merge(value) + defaults.merge(value).merge(overrides) else false end end