/// <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; }
/// <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; }