Exemplo n.º 1
0
        bool IBundleContentTransformer.Process(IBundle bundle, BundleTransformItem bundleTransformItemResult)
        {
            if (string.IsNullOrWhiteSpace(bundleTransformItemResult.Content))
            {
                bundleTransformItemResult.Content = string.Empty;
                return(true);
            }

            var lessEngine = GetLessEngine(bundle, bundleTransformItemResult);

            try {
                var transformedContent = lessEngine.TransformToCss(bundleTransformItemResult.Content, null) ?? string.Empty;
                if (!lessEngine.LastTransformationSuccessful)
                {
                    bundleTransformItemResult.Errors.Add($"Failed to process less/css file {bundleTransformItemResult.VirtualFile}");
                    bundleTransformItemResult.CanUseFallback = false;
                    return(false);
                }

                bundleTransformItemResult.Content = transformedContent;

                // Register dependencies
                foreach (var import in lessEngine.GetImports())
                {
                    bundleTransformItemResult.WatchPaths.Add(import);
                }

                return(true);
            } catch (Exception ex) {
                bundleTransformItemResult.Errors.Add(ex.Message);
                bundleTransformItemResult.CanUseFallback = false;

                return(false);
            }
        }
Exemplo n.º 2
0
        protected virtual ILessEngine GetLessEngine(IBundle bundle, BundleTransformItem bundleTransformItemResult)
        {
            var parser = new Parser(new PlainStylizer(), new Importer(new DotLessVirtualFileReader(bundle.Context.VirtualPathProvider)));

            var compress = bundle.Context.Configuration.Get(LessConfiguration.Compress);
            var debug    = bundle.Context.Configuration.Get(LessConfiguration.Debug);

            var lessEngine = new LessEngine(parser, new DotLessBundleLogger(bundle.Context.Diagnostic), compress, debug)
            {
                CurrentDirectory = Path.GetDirectoryName(bundleTransformItemResult.VirtualFile)
            };

            return(lessEngine);
        }
Exemplo n.º 3
0
        private BundleTransformItem TransformItem(ISourceItem sourceItem)
        {
            if (sourceItem == null)
            {
                throw new ArgumentNullException(nameof(sourceItem));
            }

            var inputContent        = sourceItem.Get();
            var bundleTransformItem = new BundleTransformItem(sourceItem.VirtualFile, inputContent);

            if (bundleTransformItem.Content == null)
            {
                bundleTransformItem.Content = string.Empty;
                bundleTransformItem.Errors.Add("Failed to get content");
                return(bundleTransformItem);
            }

            if (BundleContentTransformers.All(t => t.Process(this, bundleTransformItem)))
            {
                return(bundleTransformItem);
            }

            var errors = string.Join("; ", bundleTransformItem.Errors);

            Context.Diagnostic.Log(LogLevel.Error, Tag, nameof(TransformItem), $"Failed to Process {sourceItem.VirtualFile}: {errors}");
            if (!Context.Configuration.Get(BundlingConfiguration.FallbackOnError) || !bundleTransformItem.CanUseFallback)
            {
                return(null);
            }

            Context.Diagnostic.Log(LogLevel.Error, Tag, nameof(TransformItem), $"Using fallback behaviour for {sourceItem.VirtualFile}");

            bundleTransformItem.Content = sourceItem.Get();
            if (bundleTransformItem.Content == null)
            {
                Context.Diagnostic.Log(LogLevel.Error, Tag, nameof(TransformItem), $"Using fallback failed for {sourceItem.VirtualFile}");
                return(null);
            }

            bundleTransformItem.Errors.Clear();
            return(bundleTransformItem);
        }
Exemplo n.º 4
0
        bool IBundleContentTransformer.Process(IBundle bundle, BundleTransformItem bundleTransformItemResult)
        {
            if (!bundle.Context.Configuration.Get(CssConfiguration.Minify) || string.IsNullOrWhiteSpace(bundleTransformItemResult.Content))
            {
                bundleTransformItemResult.Content = bundleTransformItemResult.Content.Trim();
                return(true);
            }

            var minifier = new Minifier();

            bundleTransformItemResult.Content = minifier.MinifyStyleSheet(bundleTransformItemResult.Content, new Microsoft.Ajax.Utilities.CssSettings {
                CommentMode = CssComment.None
            })?.Trim() ?? string.Empty;
            foreach (var contextError in minifier.ErrorList)
            {
                bundleTransformItemResult.Errors.Add(contextError.Message);
            }

            return(minifier.ErrorList.Count == 0 && !string.IsNullOrWhiteSpace(bundleTransformItemResult.Content));
        }
        bool IBundleContentTransformer.Process(IBundle bundle, BundleTransformItem bundleContentTransformResult)
        {
            if (!bundle.Context.Configuration.Get(JavaScriptConfiguration.Minify) || string.IsNullOrWhiteSpace(bundleContentTransformResult.Content))
            {
                bundleContentTransformResult.Content = bundleContentTransformResult.Content.Trim();
                return(true);
            }

            var minifier = new Minifier();

            bundleContentTransformResult.Content = minifier.MinifyJavaScript(bundleContentTransformResult.Content, new CodeSettings()
            {
                EvalTreatment             = EvalTreatment.MakeImmediateSafe,
                PreserveImportantComments = false
            })?.Trim() ?? string.Empty;

            foreach (var contextError in minifier.ErrorList)
            {
                bundleContentTransformResult.Errors.Add(contextError.Message);
            }

            return(minifier.ErrorList.Count == 0 && !string.IsNullOrWhiteSpace(bundleContentTransformResult.Content));
        }