Пример #1
0
        /// <summary>
        /// Gets a code minification result from original minification result
        /// </summary>
        /// <param name="originalResult">Original minification result</param>
        /// <returns>Code minification result</returns>
        protected static CodeMinificationResult GetCodeMinificationResult(UgliflyResult originalResult)
        {
            var errors = new List<MinificationErrorInfo>();
            var warnings = new List<MinificationErrorInfo>();

            if (originalResult.HasErrors)
            {
                IList<UglifyError> originalErrors = originalResult.Errors;

                foreach (UglifyError originalError in originalErrors)
                {
                    var errorDetails = new MinificationErrorInfo(originalError.Message, originalError.StartLine,
                        originalError.StartColumn, string.Empty);
                    if (originalError.IsError)
                    {
                        errors.Add(errorDetails);
                    }
                    else
                    {
                        warnings.Add(errorDetails);
                    }
                }
            }

            return new CodeMinificationResult(originalResult.Code, errors, warnings);
        }
        /// <summary>
        /// Gets a code minification result from original minification result
        /// </summary>
        /// <param name="originalResult">Original minification result</param>
        /// <returns>Code minification result</returns>
        protected static CodeMinificationResult GetCodeMinificationResult(UgliflyResult originalResult)
        {
            var errors   = new List <MinificationErrorInfo>();
            var warnings = new List <MinificationErrorInfo>();

            if (originalResult.HasErrors)
            {
                IList <UglifyError> originalErrors = originalResult.Errors;

                foreach (UglifyError originalError in originalErrors)
                {
                    var errorDetails = new MinificationErrorInfo(originalError.Message, originalError.StartLine,
                                                                 originalError.StartColumn, string.Empty);
                    if (originalError.IsError)
                    {
                        errors.Add(errorDetails);
                    }
                    else
                    {
                        warnings.Add(errorDetails);
                    }
                }
            }

            return(new CodeMinificationResult(originalResult.Code, errors, warnings));
        }
Пример #3
0
        public static void Minify(CompilerOptions options)
        {
            if (!options.Minify || !File.Exists(options.OutputFilePath))
            {
                return;
            }

            string cssContent = File.ReadAllText(options.OutputFilePath);

            var settings = new CssSettings
            {
                ColorNames  = CssColor.Strict,
                CommentMode = CssComment.Important
            };

            UgliflyResult result = Uglify.Css(cssContent, settings);

            if (result.HasErrors)
            {
                return;
            }

            string minFilePath = Path.ChangeExtension(options.OutputFilePath, ".min.css");

            VsHelpers.CheckFileOutOfSourceControl(minFilePath);
            File.WriteAllText(minFilePath, result.Code, new UTF8Encoding(true));
            VsHelpers.AddNestedFile(options.OutputFilePath, minFilePath);
        }
Пример #4
0
        private static void MinifyHtml(Bundle bundle, MinificationResult minResult)
        {
            var settings = HtmlOptions.GetSettings(bundle);

            UgliflyResult uglifyResult = Uglify.Html(bundle.Output, settings, minResult.FileName);

            WriteMinFile(bundle, minResult, uglifyResult);
        }
Пример #5
0
        private static void MinifyCss(Bundle bundle, MinificationResult minResult)
        {
            var settings = CssOptions.GetSettings(bundle);

            UgliflyResult uglifyResult = Uglify.Css(bundle.Output, minResult.FileName, settings);

            WriteMinFile(bundle, minResult, uglifyResult);
        }
        /// <summary>
        /// Produces a code minifiction of CSS content by using the NUglify CSS Minifier
        /// </summary>
        /// <param name="content">CSS content</param>
        /// <param name="isInlineCode">Flag whether the content is inline code</param>
        /// <param name="encoding">Text encoding</param>
        /// <returns>Minification result</returns>
        public CodeMinificationResult Minify(string content, bool isInlineCode, Encoding encoding)
        {
            if (string.IsNullOrWhiteSpace(content))
            {
                return(new CodeMinificationResult(string.Empty));
            }

            CssSettings originalCssSettings = isInlineCode ?
                                              _originalInlineCssSettings : _originalEmbeddedCssSettings;
            UgliflyResult          originalResult = Uglify.Css(content, originalCssSettings, _originalJsSettings);
            CodeMinificationResult result         = GetCodeMinificationResult(originalResult);

            return(result);
        }
Пример #7
0
        internal static void AddAjaxminErrors(UgliflyResult minifier, MinificationResult minResult)
        {
            foreach (var error in minifier.Errors)
            {
                var minError = new MinificationError
                {
                    FileName     = minResult.FileName,
                    Message      = error.Message,
                    LineNumber   = error.StartLine,
                    ColumnNumber = error.StartColumn
                };

                minResult.Errors.Add(minError);
            }
        }
Пример #8
0
        public static void RebuildBundle(IRequestHandler requestHandler, string bundleFilename)
        {
            try
            {
                dynamic bundle     = JsonConvert.DeserializeObject(File.ReadAllText(PathManager.GetBundlePath(requestHandler, bundleFilename)));
                string  outputFile = bundle.outputFile;
                IEnumerable <string> inputFiles = bundle.inputFiles.ToObject <IEnumerable <string> >();
                string        input             = BandleManager.ConcatFiles(requestHandler, inputFiles);
                UgliflyResult result            = outputFile.EndsWith(".css") ? Uglify.Css(input) : outputFile.EndsWith(".js") ? Uglify.Js(input) : default(UgliflyResult);

                if (!result.HasErrors)
                {
                    File.WriteAllText(PathManager.GetContentRootPath(requestHandler) + "\\" + outputFile, result.Code);
                }
            }

            catch { }
        }
Пример #9
0
        private static void MinifyJavaScript(Bundle bundle, MinificationResult minResult)
        {
            var settings = JavaScriptOptions.GetSettings(bundle);

            if (!bundle.SourceMap)
            {
                UgliflyResult uglifyResult = Uglify.Js(bundle.Output, settings);
                WriteMinFile(bundle, minResult, uglifyResult);
            }
            else
            {
                string minFile = GetMinFileName(minResult.FileName);
                string mapFile = minFile + ".map";

                using (StringWriter writer = new StringWriter())
                {
                    using (V3SourceMap sourceMap = new V3SourceMap(writer))
                    {
                        settings.SymbolsMap = sourceMap;
                        sourceMap.StartPackage(minFile, mapFile);
                        sourceMap.SourceRoot = bundle.SourceMapRootPath;

                        string file = minResult.FileName;

                        if (bundle.OutputIsMinFile)
                        {
                            var inputs = bundle.GetAbsoluteInputFiles();

                            if (inputs.Count == 1)
                            {
                                file = inputs[0];
                            }
                        }

                        UgliflyResult uglifyResult = Uglify.Js(bundle.Output, file, settings);
                        WriteMinFile(bundle, minResult, uglifyResult);
                    }

                    minResult.SourceMap = writer.ToString();
                }
            }
        }
Пример #10
0
        private static MinificationResult MinifyJavaScript(Bundle bundle)
        {
            string file     = bundle.GetAbsoluteOutputFile();
            var    settings = JavaScriptOptions.GetSettings(bundle);
            var    result   = new MinificationResult(file, null, null);

            string minFile = GetMinFileName(file);
            string mapFile = minFile + ".map";

            try
            {
                if (!bundle.SourceMap)
                {
                    UgliflyResult uglifyResult;
                    try
                    {
                        uglifyResult = Uglify.Js(ReadAllText(file), settings);
                    }
                    catch
                    {
                        uglifyResult = new UgliflyResult(null,
                                                         new List <UglifyError> {
                            new UglifyError
                            {
                                IsError = true,
                                File    = file,
                                Message = "Error processing file"
                            }
                        });
                    }

                    result.MinifiedContent = uglifyResult.Code?.Trim();

                    if (!uglifyResult.HasErrors && !string.IsNullOrEmpty(result.MinifiedContent))
                    {
                        bool containsChanges = FileHelpers.HasFileContentChanged(minFile, result.MinifiedContent);

                        OnBeforeWritingMinFile(file, minFile, bundle, containsChanges);
                        result.Changed |= containsChanges;

                        if (containsChanges)
                        {
                            File.WriteAllText(minFile, result.MinifiedContent, new UTF8Encoding(false));
                            OnAfterWritingMinFile(file, minFile, bundle, containsChanges);
                        }

                        GzipFile(minFile, bundle, containsChanges);
                    }
                    else
                    {
                        AddAjaxminErrors(uglifyResult, result);
                    }
                }
                else
                {
                    using (StringWriter writer = new StringWriter())
                    {
                        using (V3SourceMap sourceMap = new V3SourceMap(writer))
                        {
                            settings.SymbolsMap = sourceMap;
                            sourceMap.StartPackage(minFile, mapFile);
                            sourceMap.SourceRoot = bundle.SourceMapRootPath;

                            if (file.EndsWith(".min.js"))
                            {
                                var inputs = bundle.GetAbsoluteInputFiles();

                                if (inputs.Count == 1)
                                {
                                    file = inputs[0];
                                }
                            }

                            UgliflyResult uglifyResult;
                            try
                            {
                                uglifyResult = Uglify.Js(ReadAllText(file), file, settings);
                            }
                            catch
                            {
                                uglifyResult = new UgliflyResult(null,
                                                                 new List <UglifyError> {
                                    new UglifyError
                                    {
                                        IsError = true,
                                        File    = file,
                                        Message = "Error processing file"
                                    }
                                });
                            }

                            result.MinifiedContent = uglifyResult.Code?.Trim();

                            if (!uglifyResult.HasErrors && !string.IsNullOrEmpty(result.MinifiedContent))
                            {
                                bool containsChanges = FileHelpers.HasFileContentChanged(minFile, result.MinifiedContent);
                                result.Changed |= containsChanges;
                                OnBeforeWritingMinFile(file, minFile, bundle, containsChanges);

                                if (containsChanges)
                                {
                                    File.WriteAllText(minFile, result.MinifiedContent, new UTF8Encoding(false));
                                    OnAfterWritingMinFile(file, minFile, bundle, containsChanges);
                                }


                                GzipFile(minFile, bundle, containsChanges);
                            }
                            else
                            {
                                AddAjaxminErrors(uglifyResult, result);
                            }
                        }

                        result.SourceMap = writer.ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                result.Errors.Add(new MinificationError
                {
                    FileName     = file,
                    Message      = ex.Message,
                    LineNumber   = 0,
                    ColumnNumber = 0
                });
            }

            return(result);
        }
Пример #11
0
        private static MinificationResult MinifyHtml(Bundle bundle)
        {
            string file     = bundle.GetAbsoluteOutputFile();
            string content  = ReadAllText(file);
            var    settings = HtmlOptions.GetSettings(bundle);
            string minFile  = GetMinFileName(file);

            var minResult = new MinificationResult(file, null, null);

            try
            {
                UgliflyResult uglifyResult;

                try
                {
                    uglifyResult = Uglify.Html(content, settings, file);
                }
                catch
                {
                    uglifyResult = new UgliflyResult(null,
                                                     new List <UglifyError> {
                        new UglifyError
                        {
                            IsError = true,
                            File    = file,
                            Message = "Error processing file"
                        }
                    });
                }

                minResult.MinifiedContent = uglifyResult.Code?.Trim();

                if (!uglifyResult.HasErrors && !string.IsNullOrEmpty(minResult.MinifiedContent))
                {
                    bool containsChanges = FileHelpers.HasFileContentChanged(minFile, minResult.MinifiedContent);
                    minResult.Changed |= containsChanges;
                    OnBeforeWritingMinFile(file, minFile, bundle, containsChanges);

                    if (containsChanges)
                    {
                        File.WriteAllText(minFile, minResult.MinifiedContent, new UTF8Encoding(false));
                        OnAfterWritingMinFile(file, minFile, bundle, containsChanges);
                    }

                    GzipFile(minFile, bundle, containsChanges);
                }
                else
                {
                    foreach (var error in uglifyResult.Errors)
                    {
                        minResult.Errors.Add(new MinificationError
                        {
                            FileName     = file,
                            Message      = error.Message,
                            LineNumber   = error.StartLine,
                            ColumnNumber = error.StartColumn
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                minResult.Errors.Add(new MinificationError
                {
                    FileName     = file,
                    Message      = ex.Message,
                    LineNumber   = 0,
                    ColumnNumber = 0
                });
            }

            return(minResult);
        }
Пример #12
0
        private static void WriteMinFile(Bundle bundle, MinificationResult minResult, UgliflyResult uglifyResult)
        {
            var minFile = GetMinFileName(minResult.FileName);

            minResult.MinifiedContent = uglifyResult.Code?.Trim();

            if (!uglifyResult.HasErrors)
            {
                bool containsChanges = FileHelpers.HasFileContentChanged(minFile, minResult.MinifiedContent);
                minResult.Changed |= containsChanges;
                OnBeforeWritingMinFile(minResult.FileName, minFile, bundle, containsChanges);

                if (containsChanges)
                {
                    File.WriteAllText(minFile, minResult.MinifiedContent, new UTF8Encoding(false));
                    OnAfterWritingMinFile(minResult.FileName, minFile, bundle, containsChanges);
                }
            }
            else
            {
                AddNUglifyErrors(uglifyResult, minResult);
            }
        }