Example #1
0
 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));
 }
Example #2
0
        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;
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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();
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }