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