gentelella/vendors/update/lib/tasks/rename.js

66 lines
1.4 KiB
JavaScript

'use strict';
var path = require('path');
var rimraf = require('rimraf');
var through = require('through2');
var mapping = {
'LICENSE': 'LICENSE-MIT',
'readme.md': 'README.md'
};
module.exports = function(app, base, env) {
var config = base.option('rename') || mapping;
app.task('undo', function() {
return base.toStream('files')
.pipe(rename(config, {invert: true}));
});
return function() {
return base.toStream('files')
.pipe(rename(config));
};
};
function rename(mapping, options) {
options = options || {};
if (options.invert === true) {
mapping = invert(mapping);
}
return through.obj(function(file, enc, next) {
if (file.isNull()) return next(null, file);
var fp = file.path;
function del(err) {
if (err) return next(err);
next(null, file);
}
for (var key in mapping) {
if (isMatch(file, mapping[key])) {
file.path = path.resolve(file.base, key);
rimraf(fp, del);
return;
}
}
next(null, file);
});
}
function isMatch(file, src) {
file.basename = path.basename(file.path);
if (src instanceof RegExp) {
return src.test(file.basename) || src.test(file.path);
}
if (typeof src === 'string') {
return src === file.path || src === file.basename;
}
}
function invert(obj) {
var res = {};
for (var key in obj) {
res[obj[key]] = key;
}
return res;
}