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