|
|
- 'use strict';
- const path = require('path');
- const globby = require('globby');
- const isPathCwd = require('is-path-cwd');
- const isPathInCwd = require('is-path-in-cwd');
- const pify = require('pify');
- const rimraf = require('rimraf');
- const pMap = require('p-map');
-
- const rimrafP = pify(rimraf);
-
- function safeCheck(file) {
- if (isPathCwd(file)) {
- throw new Error('Cannot delete the current working directory. Can be overridden with the `force` option.');
- }
-
- if (!isPathInCwd(file)) {
- throw new Error('Cannot delete files/folders outside the current working directory. Can be overridden with the `force` option.');
- }
- }
-
- const del = (patterns, options) => {
- options = Object.assign({}, options);
-
- const {force, dryRun} = options;
- delete options.force;
- delete options.dryRun;
-
- const mapper = file => {
- if (!force) {
- safeCheck(file);
- }
-
- file = path.resolve(options.cwd || '', file);
-
- if (dryRun) {
- return file;
- }
-
- return rimrafP(file, {glob: false}).then(() => file);
- };
-
- return globby(patterns, options).then(files => pMap(files, mapper, options));
- };
-
- module.exports = del;
- // TODO: Remove this for the next major release
- module.exports.default = del;
-
- module.exports.sync = (patterns, options) => {
- options = Object.assign({}, options);
-
- const {force, dryRun} = options;
- delete options.force;
- delete options.dryRun;
-
- return globby.sync(patterns, options).map(file => {
- if (!force) {
- safeCheck(file);
- }
-
- file = path.resolve(options.cwd || '', file);
-
- if (!dryRun) {
- rimraf.sync(file, {glob: false});
- }
-
- return file;
- });
- };
|