Esempio n. 1
0
        private void Minify(string jsPath)
        {
            string minifiedPath = null;

            if (jsPath.EndsWith(".js", StringComparison.OrdinalIgnoreCase) == false)
            {
                minifiedPath = jsPath + ".min";
            }
            else
            {
                minifiedPath = jsPath.Substring(0, jsPath.Length - 3) + ".min.js";
            }

            var mapPath = jsPath.Replace(".js", ".min.js") + ".map";

            StreamWriter mapWriter = null;
            V3SourceMap  sourceMap = null;

            try
            {
                var settings = new CodeSettings();
                //try
                //{
                //Be aware that the text encoding should be UTF-8 with no Byte-Order Mark (BOM) written at the beginning.
                //V3 source map files that include a BOM will not be read by Chrome
                mapWriter = new StreamWriter(mapPath, false, new System.Text.UTF8Encoding(false));
                sourceMap = new V3SourceMap(mapWriter);
                sourceMap.StartPackage(minifiedPath, mapPath);
                // the first argument specifies "file" field in map file.
                // the second arugment specifies "//# sourceMappingURL=" in the output (minified js)
                settings.SymbolsMap = sourceMap;
                //}
                //catch (Exception ex)
                //{
                //}


                settings.TermSemicolons = true;
                Minifier minifier = new Minifier();
                minifier.FileName = jsPath;
                var content = minifier.MinifyJavaScript(File.ReadAllText(jsPath), settings);

                using (StreamWriter sw = new StreamWriter(minifiedPath))
                {
                    sw.Write(content);
                }
            }
            finally
            {
                if (sourceMap != null)
                {
                    sourceMap.EndPackage();
                    sourceMap.Dispose();
                }
                mapWriter?.Dispose();
            }
        }
Esempio n. 2
0
        public void SourceMapForMultipleFiles()
        {
            var assetBuilder = new StringBuilder();
            var assets       = new[] { "SourceMapForMultipleFiles1.js", "SourceMapForMultipleFiles2.js", "SourceMapForMultipleFiles3.js" };

            var currentPath = AppDomain.CurrentDomain.BaseDirectory;

            foreach (var asset in assets)
            {
                assetBuilder.AppendLine("///#source 1 1 " + asset);
                var path = Path.Combine(currentPath, "TestData\\JS\\Input\\SourceMap\\" + asset);
                assetBuilder.AppendLine(File.ReadAllText(path));
            }

            var stringBuilder = new StringBuilder();

            using (var textWriter = new StringWriter(stringBuilder))
            {
                var sourceMap = new V3SourceMap(textWriter);

                sourceMap.StartPackage("infile.js", "SourceMapForMultipleFiles.js.map");
                var uglifyResult = Uglify.Js(assetBuilder.ToString(), "SourceMapForMultipleFiles.js", new CodeSettings
                {
                    SymbolsMap           = sourceMap,
                    SourceMode           = JavaScriptSourceMode.Program,
                    MinifyCode           = true,
                    OutputMode           = OutputMode.SingleLine,
                    StripDebugStatements = false,
                    LineTerminator       = "\r\n"
                });
                sourceMap.EndPackage();
                sourceMap.Dispose();

                var code = uglifyResult.Code;
                Assert.AreEqual(File.ReadAllText(Path.Combine(currentPath, "TestData\\JS\\Expected\\SourceMap\\SourceMapForMultipleFiles.js")), code);
                var builder = stringBuilder.ToString();
                Assert.AreEqual(File.ReadAllText(Path.Combine(currentPath, "TestData\\JS\\Expected\\SourceMap\\SourceMapForMultipleFiles.js.map")), builder);
            }
        }
Esempio n. 3
0
 public void Dispose()
 {
     _wrapped.Dispose();
 }
Esempio n. 4
0
        public override IEnumerable<PvcCore.PvcStream> Execute(IEnumerable<PvcCore.PvcStream> inputStreams)
        {
            var resultStreams = new List<PvcStream>();
            SwitchParser switchParser = null;

            if (!String.IsNullOrEmpty(this.commandLineSwitches))
            {
                switchParser = new SwitchParser();
                switchParser.Parse(this.commandLineSwitches);
            }

            foreach (var inputStream in inputStreams)
            {
                var dirName = Path.GetDirectoryName(inputStream.StreamName);
                var fileName = Path.GetFileNameWithoutExtension(inputStream.StreamName) + ".min" + Path.GetExtension(inputStream.StreamName);
                var resultName = Path.Combine(dirName, fileName);
                var fileContent = new StreamReader(inputStream).ReadToEnd();
                var minifier = new Minifier();
                var sourceStream = new MemoryStream();
                var outputWriter = new StreamWriter(sourceStream);

                if (inputStream.StreamName.EndsWith(".js"))
                {
                    // Currently AjaxMin only supports JS source maps
                    if (this.generateSourceMaps)
                    {
                        var resultMapName = resultName + ".map";
                        var utf8 = new UTF8Encoding(false);
                        var mapStream = new MemoryStream();
                        var mapWriter = new SourcemapStreamWriter(mapStream, utf8);
                        var sourceMap = new V3SourceMap(mapWriter);

                        if (sourceMap != null)
                        {
                            if (switchParser == null)
                            {
                                switchParser = new SwitchParser();
                            }

                            switchParser.JSSettings.SymbolsMap = sourceMap;
                            switchParser.JSSettings.TermSemicolons = true;

                            sourceMap.StartPackage(resultName, resultMapName);

                            outputWriter.Write(minifier.MinifyJavaScript(fileContent, switchParser.JSSettings));

                            sourceMap.EndPackage();
                            sourceMap.EndFile(outputWriter, "\r\n");

                            sourceMap.Dispose();
                            mapWriter.Flush();

                            resultStreams.Add(new PvcStream(() => mapStream).As(resultMapName));
                        }
                    }
                    else
                    {
                        CodeSettings settings = new CodeSettings();
                        if (switchParser != null)   settings = switchParser.JSSettings;
                        outputWriter.Write(minifier.MinifyJavaScript(fileContent, settings));
                    }
                }
                else
                {
                    CssSettings settings = new CssSettings();
                    if (switchParser != null) settings = switchParser.CssSettings;
                    outputWriter.Write(minifier.MinifyStyleSheet(fileContent, settings));
                }

                foreach (var error in minifier.ErrorList)
                {
                    Console.Error.WriteLine(error.ToString());
                }

                outputWriter.Flush();
                resultStreams.Add(new PvcStream(() => sourceStream).As(resultName));
            }

            return resultStreams;
        }
Esempio n. 5
0
        public override IEnumerable <PvcCore.PvcStream> Execute(IEnumerable <PvcCore.PvcStream> inputStreams)
        {
            var          resultStreams = new List <PvcStream>();
            SwitchParser switchParser  = null;

            if (!String.IsNullOrEmpty(this.commandLineSwitches))
            {
                switchParser = new SwitchParser();
                switchParser.Parse(this.commandLineSwitches);
            }

            foreach (var inputStream in inputStreams)
            {
                var dirName      = Path.GetDirectoryName(inputStream.StreamName);
                var fileName     = Path.GetFileNameWithoutExtension(inputStream.StreamName) + ".min" + Path.GetExtension(inputStream.StreamName);
                var resultName   = Path.Combine(dirName, fileName);
                var fileContent  = new StreamReader(inputStream).ReadToEnd();
                var minifier     = new Minifier();
                var sourceStream = new MemoryStream();
                var outputWriter = new StreamWriter(sourceStream);

                if (inputStream.StreamName.EndsWith(".js"))
                {
                    // Currently AjaxMin only supports JS source maps
                    if (this.generateSourceMaps)
                    {
                        var resultMapName = resultName + ".map";
                        var utf8          = new UTF8Encoding(false);
                        var mapStream     = new MemoryStream();
                        var mapWriter     = new SourcemapStreamWriter(mapStream, utf8);
                        var sourceMap     = new V3SourceMap(mapWriter);

                        if (sourceMap != null)
                        {
                            if (switchParser == null)
                            {
                                switchParser = new SwitchParser();
                            }

                            switchParser.JSSettings.SymbolsMap     = sourceMap;
                            switchParser.JSSettings.TermSemicolons = true;

                            sourceMap.StartPackage(resultName, resultMapName);

                            outputWriter.Write(minifier.MinifyJavaScript(fileContent, switchParser.JSSettings));

                            sourceMap.EndPackage();
                            sourceMap.EndFile(outputWriter, "\r\n");

                            sourceMap.Dispose();
                            mapWriter.Flush();

                            resultStreams.Add(new PvcStream(() => mapStream).As(resultMapName));
                        }
                    }
                    else
                    {
                        CodeSettings settings = new CodeSettings();
                        if (switchParser != null)
                        {
                            settings = switchParser.JSSettings;
                        }
                        outputWriter.Write(minifier.MinifyJavaScript(fileContent, settings));
                    }
                }
                else
                {
                    CssSettings settings = new CssSettings();
                    if (switchParser != null)
                    {
                        settings = switchParser.CssSettings;
                    }
                    outputWriter.Write(minifier.MinifyStyleSheet(fileContent, settings));
                }

                foreach (var error in minifier.ErrorList)
                {
                    Console.Error.WriteLine(error.ToString());
                }

                outputWriter.Flush();
                resultStreams.Add(new PvcStream(() => sourceStream).As(resultName));
            }

            return(resultStreams);
        }