public void Process(BundleContext context, BundleResponse bundle)
{
context.HttpContext.Response.Cache.SetLastModifiedFromFileDependencies();
var content = new StringBuilder();
var bundleFiles = new List<BundleFile>();
foreach (var bundleFile in bundle.Files)
{
var lessParser = new Parser();
ILessEngine lessEngine = this.CreateLessEngine(lessParser);
bool foundMinimizedVersion = false;
bundleFiles.Add(bundleFile);
if (BundleTable.EnableOptimizations)
{
var ext = Path.GetExtension(bundleFile.VirtualFile.VirtualPath);
if (ext != null && ext.Equals(".less", StringComparison.InvariantCultureIgnoreCase))
{
var filepath = bundleFile.VirtualFile.VirtualPath;
var minimizedFileName = string.Format(
"{0}.min.css",
filepath.Substring(0, filepath.LastIndexOf(ext, StringComparison.Ordinal)));
var virtualPathProvider = HostingEnvironment.VirtualPathProvider;
if (virtualPathProvider.FileExists(minimizedFileName))
{
var minimizedFile = virtualPathProvider.GetFile(minimizedFileName);
foundMinimizedVersion = true;
using (var reader = new StreamReader(minimizedFile.Open()))
{
content.Append(reader.ReadToEnd());
content.AppendLine();
bundleFiles.Add(new BundleFile(minimizedFile.VirtualPath, minimizedFile));
}
}
}
}
if (!foundMinimizedVersion)
{
this.SetCurrentFilePath(lessParser, bundleFile.VirtualFile.VirtualPath);
using (var reader = new StreamReader(VirtualPathProvider.OpenFile(bundleFile.VirtualFile.VirtualPath)))
{
var fileContent = reader.ReadToEnd();
content.Append(lessEngine.TransformToCss(fileContent, bundleFile.VirtualFile.VirtualPath));
content.AppendLine();
bundleFiles.AddRange(this.GetFileDependencies(lessParser).Select(f => new BundleFile(f.VirtualPath, f)));
}
}
}
if (BundleTable.EnableOptimizations)
{
// include imports in bundle files to register cache dependencies
bundle.Files = bundleFiles.Distinct().ToList();
}
bundle.ContentType = "text/css";
bundle.Content = content.ToString();
}