var node_util = require('node:util'); var path = require('node:path'); var process = require('node:process'); var globby = require('globby'); var isGlob = require('is-glob'); var slash = require('slash'); var gracefulFs = require('graceful-fs'); var isPathCwd = require('is-path-cwd'); var isPathInside = require('is-path-inside'); var rimraf = require('rimraf'); var pMap = require('p-map'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var path__default = /*#__PURE__*/_interopDefault(path); var process__default = /*#__PURE__*/_interopDefault(process); var isGlob__default = /*#__PURE__*/_interopDefault(isGlob); var slash__default = /*#__PURE__*/_interopDefault(slash); var gracefulFs__default = /*#__PURE__*/_interopDefault(gracefulFs); var isPathCwd__default = /*#__PURE__*/_interopDefault(isPathCwd); var isPathInside__default = /*#__PURE__*/_interopDefault(isPathInside); var rimraf__default = /*#__PURE__*/_interopDefault(rimraf); var pMap__default = /*#__PURE__*/_interopDefault(pMap); const rimrafP = node_util.promisify(rimraf__default.default); const rimrafOptions = { glob: false, unlink: gracefulFs__default.default.unlink, unlinkSync: gracefulFs__default.default.unlinkSync, chmod: gracefulFs__default.default.chmod, chmodSync: gracefulFs__default.default.chmodSync, stat: gracefulFs__default.default.stat, statSync: gracefulFs__default.default.statSync, lstat: gracefulFs__default.default.lstat, lstatSync: gracefulFs__default.default.lstatSync, rmdir: gracefulFs__default.default.rmdir, rmdirSync: gracefulFs__default.default.rmdirSync, readdir: gracefulFs__default.default.readdir, readdirSync: gracefulFs__default.default.readdirSync, }; function safeCheck(file, cwd) { if (isPathCwd__default.default(file)) { throw new Error('Cannot delete the current working directory. Can be overridden with the `force` option.'); } if (!isPathInside__default.default(file, cwd)) { throw new Error('Cannot delete files/directories outside the current working directory. Can be overridden with the `force` option.'); } } function normalizePatterns(patterns) { patterns = Array.isArray(patterns) ? patterns : [patterns]; patterns = patterns.map(pattern => { if (process__default.default.platform === 'win32' && isGlob__default.default(pattern) === false) { return slash__default.default(pattern); } return pattern; }); return patterns; } async function deleteAsync(patterns, {force, dryRun, cwd = process__default.default.cwd(), onProgress = () => {}, ...options} = {}) { options = { expandDirectories: false, onlyFiles: false, followSymbolicLinks: false, cwd, ...options, }; patterns = normalizePatterns(patterns); const paths = await globby.globby(patterns, options); const files = paths.sort((a, b) => b.localeCompare(a)); if (files.length === 0) { onProgress({ totalCount: 0, deletedCount: 0, percent: 1, }); } let deletedCount = 0; const mapper = async file => { file = path__default.default.resolve(cwd, file); if (!force) { safeCheck(file, cwd); } if (!dryRun) { await rimrafP(file, rimrafOptions); } deletedCount += 1; onProgress({ totalCount: files.length, deletedCount, percent: deletedCount / files.length, }); return file; }; const removedFiles = await pMap__default.default(files, mapper, options); removedFiles.sort((a, b) => a.localeCompare(b)); return removedFiles; } function deleteSync(patterns, {force, dryRun, cwd = process__default.default.cwd(), ...options} = {}) { options = { expandDirectories: false, onlyFiles: false, followSymbolicLinks: false, cwd, ...options, }; patterns = normalizePatterns(patterns); const files = globby.globbySync(patterns, options) .sort((a, b) => b.localeCompare(a)); const removedFiles = files.map(file => { file = path__default.default.resolve(cwd, file); if (!force) { safeCheck(file, cwd); } if (!dryRun) { rimraf__default.default.sync(file, rimrafOptions); } return file; }); removedFiles.sort((a, b) => a.localeCompare(b)); return removedFiles; } exports.deleteAsync = deleteAsync; exports.deleteSync = deleteSync;