-
Notifications
You must be signed in to change notification settings - Fork 2
/
plugin.js
90 lines (68 loc) · 2.85 KB
/
plugin.js
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
var through = require('through2'),
gulp = require('gulp-util'),
fs = require('fs'),
PluginError = gulp.PluginError;
var PLUGIN_NAME = 'gulp-dotnet-assembly-info';
function capitalize(value) {
return value.charAt(0).toUpperCase() + value.slice(1);
}
function assemblyInfo(config) {
if (!config) {
throw new PluginError(PLUGIN_NAME, 'No configuration specified.');
}
attributes = Object.keys(config);
if (attributes.length === 0) {
throw new PluginError(PLUGIN_NAME, 'No attributes specified.');
}
var stream = through.obj(function(file, enc, cb) {
if (file.isStream()) {
this.emit('error', new PluginError(PLUGIN_NAME, 'Streams are not supported!'));
return cb();
}
if (file.isBuffer()) {
gulp.log('Updating assembly info file \'' + file.path + '\'...');
var assemblyInfo = file.contents.toString();
attributes.forEach(function(attribute) {
var attributeName = 'Assembly' + capitalize(attribute);
var regex = new RegExp('([\\[<]\\s*?[aA]ssembly\\s*\\:\\s*' + attributeName + '\\s*\\(\\s*\\")(.*?)(\\"\\s*\\)\\s*[\\]>])', 'g');
var replacement = config[attribute];
assemblyInfo = assemblyInfo.replace(regex, function(match, p1, p2, p3) {
var value = replacement instanceof Function ? replacement(p2) : replacement;
gulp.log('\tSetting attribute \'' + attributeName + '\' to \'' + value + '\'.');
return p1 + value + p3;
});
});
file.contents = new Buffer(assemblyInfo);
}
this.push(file);
cb();
});
return stream;
}
assemblyInfo.getAssemblyMetadataFromFileSync = function(filePath){
var assemblyInfoFileContent = fs.readFileSync(filepath, "utf8");
return assemblyInfo.getAssemblyMetadata(assemblyInfoFileContent)
}
assemblyInfo.getAssemblyMetadata = function(assemblyInfoFileContent){
var regex = new RegExp('^\\s*[\\[<]\\s*[aA]ssembly\\s*:\\s*(\\s*[a-zA-Z][^(\\s]+)\\s*\\(\\s*([^)]+)\\s*\\)\\s*[\\]>]', 'gm');
var regex = /^\s*[\[<]\s*[aA]ssembly\s*:\s*(\s*[a-zA-Z][^(\s]+)\s*\(\s*([^)]+)\s*\)\s*[\]>]/gm;
var output = {};
while ((m = regex.exec(assemblyInfoFileContent)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
var value = m[2].trim();
if(value.toLowerCase() === 'true'){
value = true;
}
else if(value.toLowerCase() === 'false'){
value = false;
}
else if (value.charAt(0) === '"' && value.charAt(value.length - 1) === '"'){
value = value.substr(1, value.length -2);
}
output[m[1]] = value;
}
return output;
}
module.exports = assemblyInfo;