74 lines
1.5 KiB
JavaScript
74 lines
1.5 KiB
JavaScript
|
'use strict';
|
||
|
var path = require('path');
|
||
|
var globby = require('globby');
|
||
|
var isPathCwd = require('is-path-cwd');
|
||
|
var isPathInCwd = require('is-path-in-cwd');
|
||
|
var objectAssign = require('object-assign');
|
||
|
var Promise = require('pinkie-promise');
|
||
|
var pify = require('pify');
|
||
|
var rimraf = require('rimraf');
|
||
|
|
||
|
var rimrafP = pify(rimraf, Promise);
|
||
|
|
||
|
function safeCheck(file) {
|
||
|
if (isPathCwd(file)) {
|
||
|
throw new Error('Cannot delete the current working directory. Can be overriden with the `force` option.');
|
||
|
}
|
||
|
|
||
|
if (!isPathInCwd(file)) {
|
||
|
throw new Error('Cannot delete files/folders outside the current working directory. Can be overriden with the `force` option.');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = function (patterns, opts) {
|
||
|
opts = objectAssign({}, opts);
|
||
|
|
||
|
var force = opts.force;
|
||
|
delete opts.force;
|
||
|
|
||
|
var dryRun = opts.dryRun;
|
||
|
delete opts.dryRun;
|
||
|
|
||
|
return globby(patterns, opts).then(function (files) {
|
||
|
return Promise.all(files.map(function (file) {
|
||
|
if (!force) {
|
||
|
safeCheck(file);
|
||
|
}
|
||
|
|
||
|
file = path.resolve(opts.cwd || '', file);
|
||
|
|
||
|
if (dryRun) {
|
||
|
return Promise.resolve(file);
|
||
|
}
|
||
|
|
||
|
return rimrafP(file).then(function () {
|
||
|
return file;
|
||
|
});
|
||
|
}));
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports.sync = function (patterns, opts) {
|
||
|
opts = objectAssign({}, opts);
|
||
|
|
||
|
var force = opts.force;
|
||
|
delete opts.force;
|
||
|
|
||
|
var dryRun = opts.dryRun;
|
||
|
delete opts.dryRun;
|
||
|
|
||
|
return globby.sync(patterns, opts).map(function (file) {
|
||
|
if (!force) {
|
||
|
safeCheck(file);
|
||
|
}
|
||
|
|
||
|
file = path.resolve(opts.cwd || '', file);
|
||
|
|
||
|
if (!dryRun) {
|
||
|
rimraf.sync(file);
|
||
|
}
|
||
|
|
||
|
return file;
|
||
|
});
|
||
|
};
|