public bool CheckIfRequiresSourceMap(TranslatorOutputItem output) { return(!output.IsEmpty && output.OutputType == TranslatorOutputType.JavaScript && output.OutputKind.HasFlag(TranslatorOutputKind.ProjectOutput) && !output.OutputKind.HasFlag(TranslatorOutputKind.Locale) && !output.OutputKind.HasFlag(TranslatorOutputKind.PluginOutput) && !output.OutputKind.HasFlag(TranslatorOutputKind.Reference) && !output.OutputKind.HasFlag(TranslatorOutputKind.Resource) && !output.OutputKind.HasFlag(TranslatorOutputKind.Metadata)); }
private void Minify(TranslatorOutputItem output, CodeSettings minifierSettings) { if (output.OutputType != TranslatorOutputType.JavaScript) { return; } if (output.MinifiedVersion != null) { this.Log.Trace(output.Name + " has already a minified version " + output.MinifiedVersion.Name); return; } var formatted = output.IsEmpty ? null : output.Content.GetContentAsString(); if (formatted == null) { this.Log.Trace("Content of " + output.Name + " is empty - skipping it a nothing to minifiy"); return; } var minifiedName = FileHelper.GetMinifiedJSFileName(output.Name); var minifiedContent = this.Minify(new Minifier(), formatted, minifierSettings); output.MinifiedVersion = new TranslatorOutputItem { Assembly = output.Assembly, IsMinified = true, Name = minifiedName, OutputType = output.OutputType, OutputKind = output.OutputKind | TranslatorOutputKind.Minified, Location = output.Location, Content = minifiedContent }; if (this.AssemblyInfo.OutputFormatting == JavaScriptOutputType.Minified) { output.IsEmpty = true; } }
private TranslatorOutputItem Combine(TranslatorOutputItem target, List <TranslatorOutputItem> outputs, string fileName, string message, TranslatorOutputKind outputKind, TranslatorOutputType[] filter = null) { this.Log.Trace("There are " + outputs.Count + " " + message); if (outputs.Count <= 0) { this.Log.Trace("Skipping combining " + message + " as empty."); return(null); } if (filter == null) { filter = new[] { TranslatorOutputType.JavaScript }; } if (target != null) { this.Log.Trace("Using exisiting target " + target.Name); } else { this.Log.Trace("Using " + fileName + " as a fileName for combined " + message); } StringBuilder buffer = null; StringBuilder minifiedBuffer = null; if (this.AssemblyInfo.OutputFormatting != JavaScriptOutputType.Minified) { buffer = target != null ? target.Content.Builder : new StringBuilder(); } if (this.AssemblyInfo.OutputFormatting != JavaScriptOutputType.Formatted) { minifiedBuffer = (target != null && target.MinifiedVersion != null) ? target.MinifiedVersion.Content.Builder : new StringBuilder(); } bool firstLine = true; foreach (var output in outputs) { if (filter != null && !filter.Contains(output.OutputType)) { continue; } string formattedContent = null; string minifiedContent = null; if (!output.IsEmpty) { formattedContent = output.Content.GetContentAsString(); } if (output.MinifiedVersion != null && !output.MinifiedVersion.IsEmpty) { minifiedContent = output.MinifiedVersion.Content.GetContentAsString(); } if (formattedContent == null && minifiedContent == null) { output.IsEmpty = true; if (output.MinifiedVersion != null) { output.MinifiedVersion.IsEmpty = true; } this.Log.Trace("Skipping " + output.Name + " as it does not have formatted content nor minified."); continue; } if (buffer != null) { if (!firstLine) { firstLine = false; NewLine(buffer); } firstLine = false; if (formattedContent != null) { buffer.Append(formattedContent); } else if (minifiedContent != null) { buffer.Append(minifiedContent); } } if (minifiedBuffer != null) { if (minifiedContent != null) { minifiedBuffer.Append(minifiedContent); } else { this.Log.Warn("Output " + output.Name + " does not contain minified version"); } } output.IsEmpty = true; if (output.MinifiedVersion != null) { output.MinifiedVersion.IsEmpty = true; } } if (target != null) { return(target); } var adjustedFileName = fileName.Replace(":", "_"); var fileNameLenth = fileName.Length; while (Path.IsPathRooted(adjustedFileName)) { adjustedFileName = adjustedFileName.TrimStart(Path.DirectorySeparatorChar, '/', '\\'); if (adjustedFileName.Length == fileNameLenth) { break; } fileNameLenth = adjustedFileName.Length; } if (adjustedFileName != fileName) { fileName = adjustedFileName; this.Log.Trace("Adjusted fileName: " + fileName); } var checkExtentionFileName = FileHelper.CheckFileNameAndOutputType(fileName, TranslatorOutputType.JavaScript); if (checkExtentionFileName != null) { fileName = checkExtentionFileName; this.Log.Trace("Extention checked fileName: " + fileName); } var r = new TranslatorOutputItem { Content = buffer, OutputType = TranslatorOutputType.JavaScript, OutputKind = outputKind | TranslatorOutputKind.Combined, Name = fileName }; if (minifiedBuffer != null) { var minifiedName = FileHelper.GetMinifiedJSFileName(r.Name); r.MinifiedVersion = new TranslatorOutputItem { IsMinified = true, Name = minifiedName, OutputType = r.OutputType, OutputKind = r.OutputKind | TranslatorOutputKind.Minified, Location = r.Location, Content = minifiedBuffer }; } return(r); }
private void ConvertOutputItemIntoResourceInfoPart(Dictionary <BridgeResourceInfoPart, string> resourcePartsNonMinified, Dictionary <BridgeResourceInfoPart, string> resourcePartsMinified, TranslatorOutputItem outputItem) { if (outputItem == null || outputItem.OutputType != TranslatorOutputType.JavaScript) { return; } if (!outputItem.IsEmpty) { var part = new BridgeResourceInfoPart() { Assembly = outputItem.Assembly, Name = outputItem.Name, ResourceName = BridgeResourcesCombinedPrefix + outputItem.Name }; resourcePartsNonMinified[part] = outputItem.Content.GetContentAsString(); } if (outputItem.MinifiedVersion != null && !outputItem.MinifiedVersion.IsEmpty) { var part = new BridgeResourceInfoPart() { Assembly = outputItem.MinifiedVersion.Assembly, Name = outputItem.MinifiedVersion.Name, ResourceName = BridgeResourcesCombinedPrefix + outputItem.MinifiedVersion.Name }; resourcePartsMinified[part] = outputItem.MinifiedVersion.Content.GetContentAsString(); } }
private string DefineOutputItemFullPath(TranslatorOutputItem item, string projectOutputPath, string defaultFileName) { var fileName = item.Name; var logger = this.Log; if (fileName.Contains(Bridge.Translator.AssemblyInfo.DEFAULT_FILENAME)) { fileName = fileName.Replace(Bridge.Translator.AssemblyInfo.DEFAULT_FILENAME, defaultFileName); } // Ensure filename contains no ":". It could be used like "c:/absolute/path" fileName = fileName.Replace(":", "_"); // Trim heading slash/backslash off file names until it does not start with slash. var oldFNlen = fileName.Length; while (Path.IsPathRooted(fileName)) { fileName = fileName.TrimStart(Path.DirectorySeparatorChar, '/', '\\'); // Trimming didn't change the path. This way, it will just loop indefinitely. // Also, this means the absolute path specifies a fully-qualified DOS PathName with drive letter. if (fileName.Length == oldFNlen) { break; } oldFNlen = fileName.Length; } if (fileName != item.Name) { logger.Trace("Output file name changed to " + fileName); item.Name = fileName; } // If 'fileName' is an absolute path, Path.Combine will ignore the 'path' prefix. string filePath = fileName; if (item.Location != null) { filePath = Path.Combine(item.Location, fileName); if (fileName != filePath) { logger.Trace("Output file name changed to " + filePath); } } var filePath1 = Path.Combine(projectOutputPath, filePath); if (filePath1 != filePath) { filePath = filePath1; logger.Trace("Output file name changed to " + filePath1); } filePath = Path.GetFullPath(filePath); item.FullPath = new Uri(filePath, UriKind.RelativeOrAbsolute); return(filePath); }
internal static bool AddOutputItem(List <TranslatorOutputItem> target, string fileName, TranslatorOutputItemContent content, TranslatorOutputKind outputKind, string location = null, string assembly = null) { var fileHelper = new FileHelper(); var outputType = fileHelper.GetOutputType(fileName); TranslatorOutputItem output = null; bool isMinJs = fileHelper.IsMinJS(fileName); var searchName = fileName; if (isMinJs) { searchName = fileHelper.GetNonMinifiedJSFileName(fileName); } output = target.FirstOrDefault(x => string.Compare(x.Name, searchName, StringComparison.InvariantCultureIgnoreCase) == 0); if (output != null) { bool isAdded; if (isMinJs) { isAdded = output.MinifiedVersion == null; output.MinifiedVersion = new TranslatorOutputItem { Name = fileName, OutputType = outputType, OutputKind = outputKind | TranslatorOutputKind.Minified, Location = location, Content = content, IsMinified = true, Assembly = assembly }; } else { isAdded = output.IsEmpty; output.IsEmpty = false; } return(isAdded); } output = new TranslatorOutputItem { Name = searchName, OutputType = outputType, OutputKind = outputKind, Location = location, Content = new TranslatorOutputItemContent((string)null), Assembly = assembly }; if (isMinJs) { output.IsEmpty = true; output.MinifiedVersion = new TranslatorOutputItem { Name = fileName, OutputType = outputType, OutputKind = outputKind | TranslatorOutputKind.Minified, Location = location, Content = content, IsMinified = true, Assembly = assembly }; } else { output.Content = content; } target.Add(output); return(true); }