@skeate/mimosa-defeature
Version:
A mimosa module for flagging features and removing them from a project build
47 lines (42 loc) • 1.71 kB
JavaScript
;
var regexDefeatureUtils = require('./regex_defeature_utils');
var logger = null;
var _defeature = function( mimosaConfig, options, next ) {
if ( options.files && options.files.length ) {
options.files.forEach( function( file ) {
// remove ranges from source
var finalSource = "";
var source = file.outputFileText;
var start = 0;
var opts = {
source: source,
includedFeatures: mimosaConfig.defeature.includedFeatures,
excludedFeatures: mimosaConfig.defeature.excludedFeatures,
startCommentText: "/\\*",
endCommentText: "\\*/",
logger: logger,
allowEntireFileDefeature: false
};
var rangesToRemove = regexDefeatureUtils.mergeOverlappingRanges(regexDefeatureUtils.getRangesToRemove(opts));
if(rangesToRemove.length > 0) {
rangesToRemove.forEach(function(range) {
var sourceToDelete = source.substring(range[0], range[1]);
var linesToDelete = sourceToDelete.split('\n');
var newLineSource = linesToDelete.reduce(function(previous) {
return previous + "\n";
}, '');
finalSource += source.slice(start, range[0]) + newLineSource;
start = range[1];
});
finalSource += source.slice(start, source.length);
file.outputFileText = finalSource;
}
});
}
next();
};
exports.registration = function( mimosaConfig, register ) {
logger = mimosaConfig.log;
var exts = mimosaConfig.extensions.css;
register( ['add', 'update', 'remove', 'buildExtension'], 'afterCompile', _defeature, exts );
};