| '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; |
| }); |
| }; |