-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
94 lines (79 loc) · 2.18 KB
/
index.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
91
92
93
94
var through = require('through2');
var extname = require('path').extname;
var regexCache = {};
function escapeForRegExp(str) {
return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
function getRemovalTagsRegExp(commentStart, commentEnd, key) {
return new RegExp('(' +
escapeForRegExp(commentStart) + '\\s*' + escapeForRegExp('removeIf(' + key + ')') + '\\s*' + escapeForRegExp(commentEnd) + '\\s*' +
'(\\n|\\r|.)*?' +
escapeForRegExp(commentStart) + '\\s*' + escapeForRegExp('endRemoveIf(' + key + ')') + '\\s*' + escapeForRegExp(commentEnd) + ')',
'gi');
}
module.exports = function(options) {
options = options || {};
var conditions = [],
commentEnd = '',
commentStart; // not set means autodetect
Object.keys(options).forEach(function(key) {
if (key === 'commentStart') {
commentStart = options.commentStart;
}
else if (key === 'commentEnd') {
if (commentStart) {
// set it only if commentStart is provided
commentEnd = options.commentEnd;
}
else {
gutil.log(gutil.colors.yellow('gulp-remove-code: commentStart was not set but commentEnd provided. ' +
'The option will be ignored. commentEnd: ' + commentEnd));
}
}
else if (options[key]) {
conditions.push(key);
}
});
return function (file) {
var fileExt = extname(file);
var commentStart = '//';
var commentEnd = '';
switch (fileExt) {
case 'coffee':
commentStart = '#';
commentEnd = '';
break;
case 'css':
commentStart = '/*';
commentEnd = '*/';
break;
case 'html':
commentStart = '<!--';
commentEnd = '-->';
break;
case 'cshtml':
commentStart = '@*';
commentEnd = '*@';
break;
case 'jade':
commentStart = '//-';
commentEnd = '';
break;
}
return through(function (buf, enc, next) {
var contents = buf.toString('utf8');
if (contents.length > 0) {
for (var i = 0; i < conditions.length; i++) {
var key = conditions[i],
regex = regexCache[fileExt + key];
if (!regex) {
regex = regexCache[fileExt + key] = getRemovalTagsRegExp(commentStart, commentEnd, key);
}
contents = contents.replace(regex, '');
}
}
this.push(contents);
next();
});
};
};