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