-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMinifyGenerator.cs
More file actions
57 lines (50 loc) · 1.87 KB
/
MinifyGenerator.cs
File metadata and controls
57 lines (50 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using EnvDTE;
using Microsoft.VisualStudio.TextTemplating.VSHost;
using NUglify;
namespace SingleFileGeneratorSample
{
[Guid("cffb7601-6a1b-4f28-a2d0-a435e6686a2e")]
public sealed class MinifyCodeGenerator : BaseCodeGeneratorWithSite
{
public const string Name = nameof(MinifyCodeGenerator);
public const string Description = "Generates a minified version of JavaScript, CSS and HTML files files.";
public override string GetDefaultExtension()
{
var item = GetService(typeof(ProjectItem)) as ProjectItem;
return ".min" + Path.GetExtension(item?.FileNames[1]);
}
protected override byte[] GenerateCode(string inputFileName, string inputFileContent)
{
string ext = Path.GetExtension(inputFileName).ToLowerInvariant();
UglifyResult result = Minify(inputFileName, inputFileContent);
if (result.HasErrors)
{
return Encoding.UTF8.GetBytes("// Source file contains errors");
}
else
{
return Encoding.UTF8.GetBytes(result.Code);
}
}
private static UglifyResult Minify(string inputFileName, string inputFileContent)
{
string ext = Path.GetExtension(inputFileName).ToLowerInvariant();
switch (ext)
{
case ".js":
return Uglify.Js(inputFileContent);
case ".css":
return Uglify.Css(inputFileContent);
case ".htm":
case ".html":
return Uglify.Html(inputFileContent);
}
return new UglifyResult(inputFileContent, new List<UglifyError>());
}
}
}