Beispiel #1
0
        public override IEnumerable <PvcCore.PvcStream> Execute(IEnumerable <PvcCore.PvcStream> inputStreams)
        {
            var minifyStreams = inputStreams.Where(x => Regex.IsMatch(x.StreamName, @"\.(js|css)$"));
            var resultStreams = new List <PvcStream>();

            foreach (var inputStream in minifyStreams)
            {
                var fileContent   = new StreamReader(inputStream).ReadToEnd();
                var minifier      = new Minifier();
                var resultContent = inputStream.StreamName.EndsWith(".js") ? minifier.MinifyJavaScript(fileContent) : minifier.MinifyStyleSheet(fileContent);

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

                var dirName  = Path.GetDirectoryName(inputStream.StreamName);
                var fileName = Path.GetFileNameWithoutExtension(inputStream.StreamName) + ".min" + Path.GetExtension(inputStream.StreamName);

                var resultStream = PvcUtil.StringToStream(resultContent, Path.Combine(dirName, fileName));
                resultStreams.Add(resultStream);
            }

            return(inputStreams.Where(x => !minifyStreams.Any(y => y.StreamName == x.StreamName)).Concat(resultStreams));
        }
Beispiel #2
0
        public override IEnumerable <PvcStream> Execute(IEnumerable <PvcStream> inputStreams)
        {
            var tsFiles       = inputStreams.Select(i => i.StreamName).ToList();
            var tsFilesString = string.Join(" ", tsFiles.Select(f => "\"" + f + "\""));

            // Should we embed the compiler instead?
            var compilerPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), string.Format(@"Microsoft SDKs\TypeScript\{0}\tsc.exe", compilerVersion));

            Console.WriteLine("Using type script compiler: {0}", compilerPath);

            var p = Path.GetTempFileName();

            try
            {
                File.WriteAllText(p, string.Format("{0} {1}", this.compilerOptions, tsFilesString));

                var result = StreamProcessExecution(compilerPath, Environment.CurrentDirectory, "@" + p);

                string tsOutputLine;
                var    outStreamReader = new StreamReader(result.StandardOutput.BaseStream);
                while ((tsOutputLine = outStreamReader.ReadLine()) != null)
                {
                    Console.WriteLine(tsOutputLine);
                }

                var errorStreamReader = new StreamReader(result.StandardError.BaseStream);
                while ((tsOutputLine = errorStreamReader.ReadLine()) != null)
                {
                    Console.WriteLine(tsOutputLine);
                }

                result.WaitForExit();
                if (result.ExitCode != 0)
                {
                    throw new Exception("Type script exited with non-zero status code: " + result.ExitCode);
                }

                // TODO: Implement advanced compiler options that affect JS output.
                //
                // In the compiler options flag, if the user passes in either of the following options:
                //      --out (combine JS output into single file option)
                //      - "redirect JS output to directory" option
                //      - "generate declaration files" option
                //      - "generate source maps" options
                //
                // Then we'll need to pick up the corresponding JS and .js.map files.
                return(tsFiles
                       .Select(f => f.Replace(".ts", ".js"))
                       .Where(f => File.Exists(f))
                       .Select(f => PvcUtil.PathToStream(f)));
            }
            finally
            {
                if (File.Exists(p))
                {
                    File.Delete(p);
                }
            }
        }
        public override IEnumerable <PvcStream> Execute(IEnumerable <PvcStream> inputStreams)
        {
            var moduleDefinitions       = inputStreams.Select(s => this.ConvertToInlineHtmlModule(s));
            var moduleDefinitionsString = string.Join("\r\n", moduleDefinitions);

            return(new[]
            {
                PvcUtil.StringToStream(moduleDefinitionsString, this.output)
            });
        }
Beispiel #4
0
        public override IEnumerable <PvcStream> Execute(IEnumerable <PvcStream> inputStreams)
        {
            var outputStreams = new List <PvcStream>();

            foreach (var inputStream in inputStreams)
            {
                var jsContent  = PvcUtil.StreamToTempFile(inputStream);
                var cssContent = new AngularPreMinifier(jsContent).Parse();

                var newStreamName = Path.Combine(Path.GetDirectoryName(inputStream.StreamName), Path.GetFileNameWithoutExtension(inputStream.StreamName) + ".css");
                var resultStream  = PvcUtil.StringToStream(cssContent, newStreamName);

                outputStreams.Add(resultStream);
            }
            ;
            return(outputStreams);
        }
        private PvcStream ConvertToNamedModule(PvcStream stream)
        {
            stream.Position = 0;
            using (var reader = new StreamReader(stream))
            {
                var moduleName       = this.moduleNameGetter(stream);
                var originalContents = reader.ReadToEnd();
                var newContents      = originalContents.Replace("define([", string.Format("define(\"{0}\", [", moduleName));

                if (originalContents != newContents)
                {
                    var newStream = PvcUtil.StringToStream(newContents, stream.StreamName);
                    newStream.ResetStreamPosition();
                    return(newStream);
                }

                return(stream);
            }
        }