Example #1
0
 /// <summary>
 /// Constructs a instance of the JS uglification options
 /// </summary>
 public UglificationOptions()
 {
     ParsingOptions        = new ParsingOptions();
     CompressionOptions    = new CompressionOptions();
     ManglingOptions       = new ManglingOptions();
     CodeGenerationOptions = new CodeGenerationOptions();
     KeepFunctionNames     = false;
     ScrewIe8 = true;
     Severity = 0;
 }
 /// <summary>
 /// Constructs a instance of the uglification options
 /// </summary>
 public UglificationOptions()
 {
     ParsingOptions = new ParsingOptions();
     CompressionOptions = new CompressionOptions();
     ManglingOptions = new ManglingOptions();
     CodeGenerationOptions = new CodeGenerationOptions();
     ScrewIe8 = false;
     KeepFunctionNames = false;
     Severity = 0;
 }
        /// <summary>
        /// Constructs a instance of Uglify JS-minifier
        /// </summary>
        /// <param name="createJsEngineInstance">Delegate that creates an instance of JavaScript engine</param>
        /// <param name="uglifyConfig">Configuration settings of Uglify Minifier</param>
        public UglifyJsMinifier(Func<IJsEngine> createJsEngineInstance, UglifySettings uglifyConfig)
        {
            JsMinifierSettings jsMinifierConfig = uglifyConfig.Js;
            ParsingSettings parsingConfig = jsMinifierConfig.Parsing;
            CompressionSettings compressionConfig = jsMinifierConfig.Compression;
            ManglingSettings manglingConfig = jsMinifierConfig.Mangling;
            CodeGenerationSettings codeGenerationConfig = jsMinifierConfig.CodeGeneration;

            ParsingOptions = new ParsingOptions
            {
                Strict = parsingConfig.Strict,
                BareReturns = parsingConfig.BareReturns
            };

            CompressionOptions = new CompressionOptions
            {
                Compress = compressionConfig.Compress,
                Sequences = compressionConfig.Sequences,
                PropertiesDotNotation = compressionConfig.PropertiesDotNotation,
                DeadCode = compressionConfig.DeadCode,
                DropDebugger = compressionConfig.DropDebugger,
                Unsafe = compressionConfig.Unsafe,
                Conditionals = compressionConfig.Conditionals,
                Comparisons = compressionConfig.Comparisons,
                Evaluate = compressionConfig.Evaluate,
                Booleans = compressionConfig.Booleans,
                Loops = compressionConfig.Loops,
                Unused = compressionConfig.Unused,
                HoistFunctions = compressionConfig.HoistFunctions,
                KeepFunctionArgs = compressionConfig.KeepFunctionArgs,
                HoistVars = compressionConfig.HoistVars,
                IfReturn = compressionConfig.IfReturn,
                JoinVars = compressionConfig.JoinVars,
                Cascade = compressionConfig.Cascade,
                GlobalDefinitions = compressionConfig.GlobalDefinitions,
                PureGetters = compressionConfig.PureGetters,
                PureFunctions = compressionConfig.PureFunctions,
                DropConsole = compressionConfig.DropConsole,
                Angular = compressionConfig.Angular
            };

            ManglingOptions = new ManglingOptions
            {
                Mangle = manglingConfig.Mangle,
                Except = manglingConfig.Except,
                Eval = manglingConfig.Eval,
                Sort = manglingConfig.Sort,
                TopLevel = manglingConfig.TopLevel,
            };

            CodeGenerationOptions = new CodeGenerationOptions
            {
                Beautify = codeGenerationConfig.Beautify,
                IndentLevel = codeGenerationConfig.IndentLevel,
                IndentStart = codeGenerationConfig.IndentStart,
                QuoteKeys = codeGenerationConfig.QuoteKeys,
                SpaceColon = codeGenerationConfig.SpaceColon,
                AsciiOnly = codeGenerationConfig.AsciiOnly,
                InlineScript = codeGenerationConfig.InlineScript,
                Width = codeGenerationConfig.Width,
                MaxLineLength = codeGenerationConfig.MaxLineLength,
                Bracketize = codeGenerationConfig.Bracketize,
                Semicolons = codeGenerationConfig.Semicolons,
                Comments = codeGenerationConfig.Comments,
                PreserveLine = codeGenerationConfig.PreserveLine,
                UnescapeRegexps = codeGenerationConfig.UnescapeRegexps,
                QuoteStyle = codeGenerationConfig.QuoteStyle
            };

            ScrewIe8 = jsMinifierConfig.ScrewIe8;
            KeepFunctionNames = jsMinifierConfig.KeepFunctionNames;
            Severity = jsMinifierConfig.Severity;

            if (createJsEngineInstance == null)
            {
                string jsEngineName = uglifyConfig.JsEngine.Name;
                if (string.IsNullOrWhiteSpace(jsEngineName))
                {
                    throw new ConfigurationErrorsException(
                        string.Format(CoreStrings.Configuration_JsEngineNotSpecified,
                            "uglify",
                            @"
              * JavaScriptEngineSwitcher.Msie
              * JavaScriptEngineSwitcher.V8",
                            "MsieJsEngine")
                    );
                }

                createJsEngineInstance = (() =>
                    JsEngineSwitcher.Current.CreateJsEngineInstance(jsEngineName));
            }
            _createJsEngineInstance = createJsEngineInstance;
        }
Example #4
0
        /// <summary>
        /// Converts a uglification options to JSON
        /// </summary>
        /// <param name="options">Uglification options</param>
        /// <returns>Uglification options in JSON format</returns>
        private static JObject ConvertUglificationOptionsToJson(UglificationOptions options)
        {
            ParsingOptions        parsingOptions        = options.ParsingOptions;
            CompressionOptions    compressionOptions    = options.CompressionOptions;
            ManglingOptions       manglingOptions       = options.ManglingOptions;
            CodeGenerationOptions codeGenerationOptions = options.CodeGenerationOptions;

            var optionsJson = new JObject(
                new JProperty("warnings", options.Severity > 0
                              ));

            optionsJson.Add("parse", new JObject(
                                new JProperty("bare_returns", parsingOptions.BareReturns),
                                new JProperty("shebang", false),
                                new JProperty("strict", parsingOptions.Strict)
                                ));

            if (compressionOptions.Compress)
            {
                optionsJson.Add("compress", new JObject(
                                    new JProperty("angular", compressionOptions.Angular),
                                    new JProperty("booleans", compressionOptions.Booleans),
                                    new JProperty("cascade", compressionOptions.Cascade),
                                    new JProperty("collapse_vars", compressionOptions.CollapseVars),
                                    new JProperty("comparisons", compressionOptions.Comparisons),
                                    new JProperty("conditionals", compressionOptions.Conditionals),
                                    new JProperty("dead_code", compressionOptions.DeadCode),
                                    new JProperty("drop_console", compressionOptions.DropConsole),
                                    new JProperty("drop_debugger", compressionOptions.DropDebugger),
                                    new JProperty("evaluate", compressionOptions.Evaluate),
                                    new JProperty("global_defs",
                                                  ParseGlobalDefinitions(compressionOptions.GlobalDefinitions)),
                                    new JProperty("hoist_funs", compressionOptions.HoistFunctions),
                                    new JProperty("hoist_vars", compressionOptions.HoistVars),
                                    new JProperty("if_return", compressionOptions.IfReturn),
                                    new JProperty("join_vars", compressionOptions.JoinVars),
                                    new JProperty("keep_fargs", compressionOptions.KeepFunctionArgs),
                                    new JProperty("keep_fnames", options.KeepFunctionNames),
                                    new JProperty("keep_infinity", compressionOptions.KeepInfinity),
                                    new JProperty("loops", compressionOptions.Loops),
                                    new JProperty("negate_iife", compressionOptions.NegateIife),
                                    new JProperty("passes", compressionOptions.Passes),
                                    new JProperty("properties", compressionOptions.PropertiesDotNotation),
                                    new JProperty("pure_getters", compressionOptions.PureGetters),
                                    new JProperty("pure_funcs",
                                                  ConvertCommaSeparatedListToJson(compressionOptions.PureFunctions)),
                                    new JProperty("reduce_vars", compressionOptions.ReduceVars),
                                    new JProperty("screw_ie8", options.ScrewIe8),
                                    new JProperty("sequences", compressionOptions.Sequences),
                                    new JProperty("toplevel", compressionOptions.TopLevel),
                                    new JProperty("top_retain",
                                                  ConvertCommaSeparatedListToJson(compressionOptions.TopRetain, new JArray())),
                                    new JProperty("unsafe", compressionOptions.Unsafe),
                                    new JProperty("unsafe_math", compressionOptions.UnsafeMath),
                                    new JProperty("unsafe_proto", compressionOptions.UnsafeProto),
                                    new JProperty("unsafe_regexp", compressionOptions.UnsafeRegExp),
                                    new JProperty("unused", compressionOptions.Unused)
                                    ));
            }
            else
            {
                optionsJson.Add("compress", false);
            }


            if (manglingOptions.Mangle)
            {
                optionsJson.Add("mangle", new JObject(
                                    new JProperty("eval", manglingOptions.Eval),
                                    new JProperty("except",
                                                  ConvertCommaSeparatedListToJson(manglingOptions.Except, new JArray())),
                                    new JProperty("keep_fnames", options.KeepFunctionNames),
                                    new JProperty("screw_ie8", options.ScrewIe8),
                                    new JProperty("toplevel", manglingOptions.TopLevel)
                                    ));
            }
            else
            {
                optionsJson.Add("mangle", false);
            }

            optionsJson.Add("output", new JObject(
                                new JProperty("ascii_only", codeGenerationOptions.AsciiOnly),
                                new JProperty("beautify", codeGenerationOptions.Beautify),
                                new JProperty("bracketize", codeGenerationOptions.Bracketize),
                                new JProperty("comments", codeGenerationOptions.Comments),
                                new JProperty("indent_level", codeGenerationOptions.IndentLevel),
                                new JProperty("indent_start", codeGenerationOptions.IndentStart),
                                new JProperty("inline_script", codeGenerationOptions.InlineScript),
                                new JProperty("keep_quoted_props", codeGenerationOptions.KeepQuotedProperties),
                                new JProperty("max_line_len", codeGenerationOptions.MaxLineLength),
                                new JProperty("preserve_line", codeGenerationOptions.PreserveLine),
                                new JProperty("quote_keys", codeGenerationOptions.QuoteKeys),
                                new JProperty("quote_style", codeGenerationOptions.QuoteStyle),
                                new JProperty("screw_ie8", options.ScrewIe8),
                                new JProperty("semicolons", codeGenerationOptions.Semicolons),
                                new JProperty("shebang", false),
                                new JProperty("space_colon", codeGenerationOptions.SpaceColon),
                                new JProperty("unescape_regexps", codeGenerationOptions.UnescapeRegexps),
                                new JProperty("width", codeGenerationOptions.Width),
                                new JProperty("wrap_iife", codeGenerationOptions.WrapIife)
                                ));

            return(optionsJson);
        }
        /// <summary>
        /// Constructs a instance of Uglify JS minifier
        /// </summary>
        /// <param name="createJsEngineInstance">Delegate that creates an instance of JS engine</param>
        /// <param name="uglifyConfig">Configuration settings of Uglify Minifier</param>
        public UglifyJsMinifier(Func <IJsEngine> createJsEngineInstance, UglifySettings uglifyConfig)
        {
            JsMinifierSettings     jsMinifierConfig     = uglifyConfig.Js;
            ParsingSettings        parsingConfig        = jsMinifierConfig.Parsing;
            CompressionSettings    compressionConfig    = jsMinifierConfig.Compression;
            ManglingSettings       manglingConfig       = jsMinifierConfig.Mangling;
            CodeGenerationSettings codeGenerationConfig = jsMinifierConfig.CodeGeneration;

            ParsingOptions = new ParsingOptions
            {
                BareReturns = parsingConfig.BareReturns,
                Strict      = parsingConfig.Strict
            };

            CompressionOptions = new CompressionOptions
            {
                Angular               = compressionConfig.Angular,
                Booleans              = compressionConfig.Booleans,
                Cascade               = compressionConfig.Cascade,
                CollapseVars          = compressionConfig.CollapseVars,
                Comparisons           = compressionConfig.Comparisons,
                Compress              = compressionConfig.Compress,
                Conditionals          = compressionConfig.Conditionals,
                DeadCode              = compressionConfig.DeadCode,
                DropConsole           = compressionConfig.DropConsole,
                DropDebugger          = compressionConfig.DropDebugger,
                Evaluate              = compressionConfig.Evaluate,
                GlobalDefinitions     = compressionConfig.GlobalDefinitions,
                HoistFunctions        = compressionConfig.HoistFunctions,
                HoistVars             = compressionConfig.HoistVars,
                IfReturn              = compressionConfig.IfReturn,
                JoinVars              = compressionConfig.JoinVars,
                KeepFunctionArgs      = compressionConfig.KeepFunctionArgs,
                KeepInfinity          = compressionConfig.KeepInfinity,
                Loops                 = compressionConfig.Loops,
                NegateIife            = compressionConfig.NegateIife,
                Passes                = compressionConfig.Passes,
                PropertiesDotNotation = compressionConfig.PropertiesDotNotation,
                PureGetters           = compressionConfig.PureGetters,
                PureFunctions         = compressionConfig.PureFunctions,
                ReduceVars            = compressionConfig.ReduceVars,
                Sequences             = compressionConfig.Sequences,
                TopLevel              = compressionConfig.TopLevel,
                TopRetain             = compressionConfig.TopRetain,
                Unsafe                = compressionConfig.Unsafe,
                UnsafeMath            = compressionConfig.UnsafeMath,
                UnsafeProto           = compressionConfig.UnsafeProto,
                UnsafeRegExp          = compressionConfig.UnsafeRegExp,
                Unused                = compressionConfig.Unused
            };

            ManglingOptions = new ManglingOptions
            {
                Eval     = manglingConfig.Eval,
                Except   = manglingConfig.Except,
                Mangle   = manglingConfig.Mangle,
                TopLevel = manglingConfig.TopLevel,
            };

            CodeGenerationOptions = new CodeGenerationOptions
            {
                AsciiOnly            = codeGenerationConfig.AsciiOnly,
                Beautify             = codeGenerationConfig.Beautify,
                Bracketize           = codeGenerationConfig.Bracketize,
                Comments             = codeGenerationConfig.Comments,
                IndentLevel          = codeGenerationConfig.IndentLevel,
                IndentStart          = codeGenerationConfig.IndentStart,
                InlineScript         = codeGenerationConfig.InlineScript,
                KeepQuotedProperties = codeGenerationConfig.KeepQuotedProperties,
                MaxLineLength        = codeGenerationConfig.MaxLineLength,
                PreserveLine         = codeGenerationConfig.PreserveLine,
                QuoteKeys            = codeGenerationConfig.QuoteKeys,
                QuoteStyle           = codeGenerationConfig.QuoteStyle,
                Semicolons           = codeGenerationConfig.Semicolons,
                SpaceColon           = codeGenerationConfig.SpaceColon,
                UnescapeRegexps      = codeGenerationConfig.UnescapeRegexps,
                Width    = codeGenerationConfig.Width,
                WrapIife = codeGenerationConfig.WrapIife
            };

            KeepFunctionNames = jsMinifierConfig.KeepFunctionNames;
            ScrewIe8          = jsMinifierConfig.ScrewIe8;
            Severity          = jsMinifierConfig.Severity;

            if (createJsEngineInstance == null)
            {
                string jsEngineName = uglifyConfig.JsEngine.Name;
                if (string.IsNullOrWhiteSpace(jsEngineName))
                {
                    throw new ConfigurationErrorsException(
                              string.Format(CoreStrings.Configuration_JsEngineNotSpecified,
                                            "uglify",
                                            @"
  * JavaScriptEngineSwitcher.Msie
  * JavaScriptEngineSwitcher.V8
  * JavaScriptEngineSwitcher.ChakraCore",
                                            "MsieJsEngine")
                              );
                }

                createJsEngineInstance = () => JsEngineSwitcher.Instance.CreateEngine(jsEngineName);
            }
            _createJsEngineInstance = createJsEngineInstance;
        }