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