clean-directory
Version:
A tiny module to clean a directory selecting which files or directories to keep.
48 lines (40 loc) • 1.26 kB
JavaScript
const path = require('path')
const glob = require('glob-ignore')
const fs = require('fs-extra')
const async = require('async')
var defaultOptions = {
parallelRemove: 10
}
function setOptions (options) {
var opt = {}
Object.keys(defaultOptions).forEach(function (key) {
if (!options[key]) opt[key] = defaultOptions[key]
else opt[key] = options[key]
})
return opt
}
module.exports = function (dir, filters, options, callback) {
callback = callback || options || filters
options = typeof options === 'object' ? options : filters
if (typeof options === 'function') options = {}
var opt = setOptions(options)
glob('**', filters, {cwd: dir}, function (err, paths) {
if (err) return callback(err)
async.mapLimit(paths, opt.parallelRemove, function (item, next) {
var full = path.join(dir, item)
fs.remove(full, function (err) {
if (err) return next(err)
else return next(null, full)
})
}, callback)
})
}
module.exports.sync = function (dir, filters) {
var paths = glob.sync('**', filters, {cwd: dir})
paths = paths.map(function (item) {
var full = path.join(dir, item)
fs.removeSync(full)
return full
})
return paths
}