config redirect

This commit is contained in:
Nuno Coração
2023-01-29 22:30:24 +00:00
parent 17557c7d73
commit 5fb4bd8083
9905 changed files with 1258996 additions and 36355 deletions
+80
View File
@@ -0,0 +1,80 @@
{
"name": "rimraf",
"version": "4.1.0",
"main": "./dist/cjs/src/index-cjs.js",
"module": "./dist/mjs/index.js",
"bin": "./dist/cjs/src/bin.js",
"exports": {
".": {
"import": {
"default": "./dist/mjs/index.js",
"types": "./dist/mjs/index.d.ts"
},
"require": {
"default": "./dist/cjs/src/index-cjs.js",
"types": "./dist/cjs/src/index-cjs.d.ts"
}
}
},
"files": [
"dist"
],
"description": "A deep deletion module for node (like `rm -rf`)",
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
"license": "ISC",
"repository": "git://github.com/isaacs/rimraf.git",
"scripts": {
"preversion": "npm test",
"postversion": "npm publish",
"prepublishOnly": "git push origin --follow-tags",
"preprepare": "rm -rf dist",
"prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json",
"postprepare": "bash fixup.sh",
"pretest": "npm run prepare",
"presnap": "npm run prepare",
"test": "c8 tap",
"snap": "c8 tap",
"format": "prettier --write . --loglevel warn",
"benchmark": "node benchmark/index.js",
"typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
},
"prettier": {
"semi": false,
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"singleQuote": true,
"jsxSingleQuote": false,
"bracketSameLine": true,
"arrowParens": "avoid",
"endOfLine": "lf"
},
"devDependencies": {
"@types/node": "^18.11.9",
"@types/tap": "^15.0.7",
"c8": "^7.12.0",
"eslint-config-prettier": "^8.6.0",
"mkdirp": "1",
"prettier": "^2.8.2",
"tap": "^16.3.3",
"ts-node": "^10.9.1",
"typedoc": "^0.23.21",
"typescript": "^4.9.3"
},
"tap": {
"coverage": false,
"libtap-settings": "libtap-settings.js",
"node-arg": [
"--no-warnings",
"--loader",
"ts-node/esm"
],
"ts": false
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"engines": {
"node": ">=14"
}
}
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env node
export declare const help: string;
declare const main: {
(...args: string[]): Promise<1 | 0>;
help: string;
};
export default main;
Generated Vendored Executable
+144
View File
@@ -0,0 +1,144 @@
#!/usr/bin/env node
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.help = void 0;
const package_json_1 = require("../package.json");
const index_cjs_js_1 = __importDefault(require("./index-cjs.js"));
const runHelpForUsage = () => console.error('run `rimraf --help` for usage information');
exports.help = `rimraf version ${package_json_1.version}
Usage: rimraf <path> [<path> ...]
Deletes all files and folders at "path", recursively.
Options:
-- Treat all subsequent arguments as paths
-h --help Display this usage info
--preserve-root Do not remove '/' recursively (default)
--no-preserve-root Do not treat '/' specially
--impl=<type> Specify the implementationt to use.
rimraf: choose the best option
native: the built-in implementation in Node.js
manual: the platform-specific JS implementation
posix: the Posix JS implementation
windows: the Windows JS implementation
move-remove: a slower Windows JS fallback implementation
Implementation-specific options:
--tmp=<path> Folder to hold temp files for 'move-remove' implementation
--max-retries=<n> maxRetries for the 'native' and 'windows' implementations
--retry-delay=<n> retryDelay for the 'native' implementation, default 100
--backoff=<n> Exponential backoff factor for retries (default: 1.2)
`;
const path_1 = require("path");
const main = async (...args) => {
if (process.env.__RIMRAF_TESTING_BIN_FAIL__ === '1') {
throw new Error('simulated rimraf failure');
}
const opt = {};
const paths = [];
let dashdash = false;
let impl = index_cjs_js_1.default;
for (const arg of args) {
if (dashdash) {
paths.push(arg);
continue;
}
if (arg === '--') {
dashdash = true;
continue;
}
else if (arg === '-h' || arg === '--help') {
console.log(exports.help);
return 0;
}
else if (arg === '--preserve-root') {
opt.preserveRoot = true;
continue;
}
else if (arg === '--no-preserve-root') {
opt.preserveRoot = false;
continue;
}
else if (/^--tmp=/.test(arg)) {
const val = arg.substring('--tmp='.length);
opt.tmp = val;
continue;
}
else if (/^--max-retries=/.test(arg)) {
const val = +arg.substring('--max-retries='.length);
opt.maxRetries = val;
continue;
}
else if (/^--retry-delay=/.test(arg)) {
const val = +arg.substring('--retry-delay='.length);
opt.retryDelay = val;
continue;
}
else if (/^--backoff=/.test(arg)) {
const val = +arg.substring('--backoff='.length);
opt.backoff = val;
continue;
}
else if (/^--impl=/.test(arg)) {
const val = arg.substring('--impl='.length);
switch (val) {
case 'rimraf':
impl = index_cjs_js_1.default;
continue;
case 'native':
case 'manual':
case 'posix':
case 'windows':
impl = index_cjs_js_1.default[val];
continue;
case 'move-remove':
impl = index_cjs_js_1.default.moveRemove;
continue;
default:
console.error(`unknown implementation: ${val}`);
runHelpForUsage();
return 1;
}
}
else if (/^-/.test(arg)) {
console.error(`unknown option: ${arg}`);
runHelpForUsage();
return 1;
}
else {
paths.push(arg);
}
}
if (opt.preserveRoot !== false) {
for (const path of paths.map(p => (0, path_1.resolve)(p))) {
if (path === (0, path_1.parse)(path).root) {
console.error(`rimraf: it is dangerous to operate recursively on '/'`);
console.error('use --no-preserve-root to override this failsafe');
return 1;
}
}
}
if (!paths.length) {
console.error('rimraf: must provide a path to remove');
runHelpForUsage();
return 1;
}
await impl(paths, opt);
return 0;
};
main.help = exports.help;
exports.default = main;
if (typeof require === 'function' &&
typeof module === 'object' &&
require.main === module) {
const args = process.argv.slice(2);
main(...args).then(code => process.exit(code), er => {
console.error(er);
process.exit(1);
});
}
//# sourceMappingURL=bin.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/bin.ts"],"names":[],"mappings":";;;;;;;AACA,kDAAyC;AACzC,kEAAmC;AAGnC,MAAM,eAAe,GAAG,GAAG,EAAE,CAC3B,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;AAE/C,QAAA,IAAI,GAAG,kBAAkB,sBAAO;;;;;;;;;;;;;;;;;;;;;;;;CAwB5C,CAAA;AAED,+BAAqC;AAErC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAG,IAAc,EAAE,EAAE;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,EAAE;QACnD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;KAC5C;IAED,MAAM,GAAG,GAAkB,EAAE,CAAA;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,IAAI,GACN,sBAAM,CAAA;IAER,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,QAAQ,EAAE;YACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACf,SAAQ;SACT;QACD,IAAI,GAAG,KAAK,IAAI,EAAE;YAChB,QAAQ,GAAG,IAAI,CAAA;YACf,SAAQ;SACT;aAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC,YAAI,CAAC,CAAA;YACjB,OAAO,CAAC,CAAA;SACT;aAAM,IAAI,GAAG,KAAK,iBAAiB,EAAE;YACpC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAA;YACvB,SAAQ;SACT;aAAM,IAAI,GAAG,KAAK,oBAAoB,EAAE;YACvC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAA;YACxB,SAAQ;SACT;aAAM,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC1C,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;YACb,SAAQ;SACT;aAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACtC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;YACnD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;YACpB,SAAQ;SACT;aAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACtC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;YACnD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;YACpB,SAAQ;SACT;aAAM,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YAC/C,GAAG,CAAC,OAAO,GAAG,GAAG,CAAA;YACjB,SAAQ;SACT;aAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YAC3C,QAAQ,GAAG,EAAE;gBACX,KAAK,QAAQ;oBACX,IAAI,GAAG,sBAAM,CAAA;oBACb,SAAQ;gBACV,KAAK,QAAQ,CAAC;gBACd,KAAK,QAAQ,CAAC;gBACd,KAAK,OAAO,CAAC;gBACb,KAAK,SAAS;oBACZ,IAAI,GAAG,sBAAM,CAAC,GAAG,CAAC,CAAA;oBAClB,SAAQ;gBACV,KAAK,aAAa;oBAChB,IAAI,GAAG,sBAAM,CAAC,UAAU,CAAA;oBACxB,SAAQ;gBACV;oBACE,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;oBAC/C,eAAe,EAAE,CAAA;oBACjB,OAAO,CAAC,CAAA;aACX;SACF;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAA;YACvC,eAAe,EAAE,CAAA;YACjB,OAAO,CAAC,CAAA;SACT;aAAM;YACL,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAChB;KACF;IAED,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,EAAE;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,cAAO,EAAC,CAAC,CAAC,CAAC,EAAE;YAC7C,IAAI,IAAI,KAAK,IAAA,YAAK,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE;gBAC7B,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAA;gBACtE,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;gBACjE,OAAO,CAAC,CAAA;aACT;SACF;KACF;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACtD,eAAe,EAAE,CAAA;QACjB,OAAO,CAAC,CAAA;KACT;IAED,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACtB,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AACD,IAAI,CAAC,IAAI,GAAG,YAAI,CAAA;AAEhB,kBAAe,IAAI,CAAA;AAEnB,IACE,OAAO,OAAO,KAAK,UAAU;IAC7B,OAAO,MAAM,KAAK,QAAQ;IAC1B,OAAO,CAAC,IAAI,KAAK,MAAM,EACvB;IACA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAChB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAC1B,EAAE,CAAC,EAAE;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CACF,CAAA;CACF"}
+2
View File
@@ -0,0 +1,2 @@
export declare const defaultTmp: (path: string) => Promise<string>;
export declare const defaultTmpSync: (path: string) => string;
+61
View File
@@ -0,0 +1,61 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultTmpSync = exports.defaultTmp = void 0;
// The default temporary folder location for use in the windows algorithm.
// It's TEMPting to use dirname(path), since that's guaranteed to be on the
// same device. However, this means that:
// rimraf(path).then(() => rimraf(dirname(path)))
// will often fail with EBUSY, because the parent dir contains
// marked-for-deletion directory entries (which do not show up in readdir).
// The approach here is to use os.tmpdir() if it's on the same drive letter,
// or resolve(path, '\\temp') if it exists, or the root of the drive if not.
// On Posix (not that you'd be likely to use the windows algorithm there),
// it uses os.tmpdir() always.
const os_1 = require("os");
const path_1 = require("path");
const fs_js_1 = require("./fs.js");
const platform_js_1 = __importDefault(require("./platform.js"));
const { stat } = fs_js_1.promises;
const isDirSync = (path) => {
try {
return (0, fs_js_1.statSync)(path).isDirectory();
}
catch (er) {
return false;
}
};
const isDir = (path) => stat(path).then(st => st.isDirectory(), () => false);
const win32DefaultTmp = async (path) => {
const { root } = (0, path_1.parse)(path);
const tmp = (0, os_1.tmpdir)();
const { root: tmpRoot } = (0, path_1.parse)(tmp);
if (root.toLowerCase() === tmpRoot.toLowerCase()) {
return tmp;
}
const driveTmp = (0, path_1.resolve)(root, '/temp');
if (await isDir(driveTmp)) {
return driveTmp;
}
return root;
};
const win32DefaultTmpSync = (path) => {
const { root } = (0, path_1.parse)(path);
const tmp = (0, os_1.tmpdir)();
const { root: tmpRoot } = (0, path_1.parse)(tmp);
if (root.toLowerCase() === tmpRoot.toLowerCase()) {
return tmp;
}
const driveTmp = (0, path_1.resolve)(root, '/temp');
if (isDirSync(driveTmp)) {
return driveTmp;
}
return root;
};
const posixDefaultTmp = async () => (0, os_1.tmpdir)();
const posixDefaultTmpSync = () => (0, os_1.tmpdir)();
exports.defaultTmp = platform_js_1.default === 'win32' ? win32DefaultTmp : posixDefaultTmp;
exports.defaultTmpSync = platform_js_1.default === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync;
//# sourceMappingURL=default-tmp.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"default-tmp.js","sourceRoot":"","sources":["../../../src/default-tmp.ts"],"names":[],"mappings":";;;;;;AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,0CAA0C;AAC1C,iDAAiD;AACjD,8DAA8D;AAC9D,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,8BAA8B;AAC9B,2BAA2B;AAC3B,+BAAqC;AACrC,mCAA4C;AAC5C,gEAAoC;AACpC,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAQ,CAAA;AAEzB,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;IACjC,IAAI;QACF,OAAO,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;KACpC;IAAC,OAAO,EAAE,EAAE;QACX,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACb,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EACtB,GAAG,EAAE,CAAC,KAAK,CACZ,CAAA;AAEH,MAAM,eAAe,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,YAAK,EAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,IAAA,WAAM,GAAE,CAAA;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAA,YAAK,EAAC,GAAG,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE;QAChD,OAAO,GAAG,CAAA;KACX;IAED,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE;QACzB,OAAO,QAAQ,CAAA;KAChB;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,YAAK,EAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,IAAA,WAAM,GAAE,CAAA;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAA,YAAK,EAAC,GAAG,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE;QAChD,OAAO,GAAG,CAAA;KACX;IAED,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;QACvB,OAAO,QAAQ,CAAA;KAChB;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE,CAAC,IAAA,WAAM,GAAE,CAAA;AAC5C,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,IAAA,WAAM,GAAE,CAAA;AAE7B,QAAA,UAAU,GACrB,qBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAA;AAC7C,QAAA,cAAc,GACzB,qBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAA"}
+2
View File
@@ -0,0 +1,2 @@
export declare const fixEPERM: (fn: (path: string) => Promise<any>) => (path: string) => Promise<any>;
export declare const fixEPERMSync: (fn: (path: string) => any) => (path: string) => any;
+58
View File
@@ -0,0 +1,58 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.fixEPERMSync = exports.fixEPERM = void 0;
const fs_js_1 = require("./fs.js");
const { chmod } = fs_js_1.promises;
const fixEPERM = (fn) => async (path) => {
try {
return await fn(path);
}
catch (er) {
const fer = er;
if (fer?.code === 'ENOENT') {
return;
}
if (fer?.code === 'EPERM') {
try {
await chmod(path, 0o666);
}
catch (er2) {
const fer2 = er2;
if (fer2?.code === 'ENOENT') {
return;
}
throw er;
}
return await fn(path);
}
throw er;
}
};
exports.fixEPERM = fixEPERM;
const fixEPERMSync = (fn) => (path) => {
try {
return fn(path);
}
catch (er) {
const fer = er;
if (fer?.code === 'ENOENT') {
return;
}
if (fer?.code === 'EPERM') {
try {
(0, fs_js_1.chmodSync)(path, 0o666);
}
catch (er2) {
const fer2 = er2;
if (fer2?.code === 'ENOENT') {
return;
}
throw er;
}
return fn(path);
}
throw er;
}
};
exports.fixEPERMSync = fixEPERMSync;
//# sourceMappingURL=fix-eperm.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"fix-eperm.js","sourceRoot":"","sources":["../../../src/fix-eperm.ts"],"names":[],"mappings":";;;AAAA,mCAAsD;AACtD,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAQ,CAAA;AAEnB,MAAM,QAAQ,GACnB,CAAC,EAAkC,EAAE,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7D,IAAI;QACF,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;KACtB;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAAa,CAAA;QACzB,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE;YAC1B,OAAM;SACP;QACD,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE;YACzB,IAAI;gBACF,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;aACzB;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,GAAc,CAAA;gBAC3B,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE;oBAC3B,OAAM;iBACP;gBACD,MAAM,EAAE,CAAA;aACT;YACD,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;SACtB;QACD,MAAM,EAAE,CAAA;KACT;AACH,CAAC,CAAA;AAvBU,QAAA,QAAQ,YAuBlB;AAEI,MAAM,YAAY,GAAG,CAAC,EAAyB,EAAE,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE;IAC1E,IAAI;QACF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;KAChB;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAAa,CAAA;QACzB,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE;YAC1B,OAAM;SACP;QACD,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE;YACzB,IAAI;gBACF,IAAA,iBAAS,EAAC,IAAI,EAAE,KAAK,CAAC,CAAA;aACvB;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,GAAc,CAAA;gBAC3B,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE;oBAC3B,OAAM;iBACP;gBACD,MAAM,EAAE,CAAA;aACT;YACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;SAChB;QACD,MAAM,EAAE,CAAA;KACT;AACH,CAAC,CAAA;AAtBY,QAAA,YAAY,gBAsBxB"}
+18
View File
@@ -0,0 +1,18 @@
import fs from 'fs';
export type FsError = Error & {
code?: string;
path?: string;
};
export { chmodSync, mkdirSync, readdirSync, renameSync, rmdirSync, rmSync, statSync, unlinkSync, } from 'fs';
export declare const promises: {
chmod: (path: fs.PathLike, mode: fs.Mode) => Promise<void>;
mkdir: (path: fs.PathLike, options?: fs.Mode | (fs.MakeDirectoryOptions & {
recursive?: boolean | null;
}) | undefined | null) => Promise<string | undefined>;
readdir: (path: fs.PathLike) => Promise<string[]>;
rename: (oldPath: fs.PathLike, newPath: fs.PathLike) => Promise<void>;
rm: (path: fs.PathLike, options: fs.RmOptions) => Promise<void>;
rmdir: (path: fs.PathLike) => Promise<void>;
stat: (path: fs.PathLike) => Promise<fs.Stats>;
unlink: (path: fs.PathLike) => Promise<void>;
};
+41
View File
@@ -0,0 +1,41 @@
"use strict";
// promisify ourselves, because older nodes don't have fs.promises
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.promises = exports.unlinkSync = exports.statSync = exports.rmSync = exports.rmdirSync = exports.renameSync = exports.readdirSync = exports.mkdirSync = exports.chmodSync = void 0;
const fs_1 = __importDefault(require("fs"));
// sync ones just take the sync version from node
var fs_2 = require("fs");
Object.defineProperty(exports, "chmodSync", { enumerable: true, get: function () { return fs_2.chmodSync; } });
Object.defineProperty(exports, "mkdirSync", { enumerable: true, get: function () { return fs_2.mkdirSync; } });
Object.defineProperty(exports, "readdirSync", { enumerable: true, get: function () { return fs_2.readdirSync; } });
Object.defineProperty(exports, "renameSync", { enumerable: true, get: function () { return fs_2.renameSync; } });
Object.defineProperty(exports, "rmdirSync", { enumerable: true, get: function () { return fs_2.rmdirSync; } });
Object.defineProperty(exports, "rmSync", { enumerable: true, get: function () { return fs_2.rmSync; } });
Object.defineProperty(exports, "statSync", { enumerable: true, get: function () { return fs_2.statSync; } });
Object.defineProperty(exports, "unlinkSync", { enumerable: true, get: function () { return fs_2.unlinkSync; } });
// unrolled for better inlining, this seems to get better performance
// than something like:
// const makeCb = (res, rej) => (er, ...d) => er ? rej(er) : res(...d)
// which would be a bit cleaner.
const chmod = (path, mode) => new Promise((res, rej) => fs_1.default.chmod(path, mode, (er, ...d) => (er ? rej(er) : res(...d))));
const mkdir = (path, options) => new Promise((res, rej) => fs_1.default.mkdir(path, options, (er, made) => (er ? rej(er) : res(made))));
const readdir = (path) => new Promise((res, rej) => fs_1.default.readdir(path, (er, data) => (er ? rej(er) : res(data))));
const rename = (oldPath, newPath) => new Promise((res, rej) => fs_1.default.rename(oldPath, newPath, (er, ...d) => (er ? rej(er) : res(...d))));
const rm = (path, options) => new Promise((res, rej) => fs_1.default.rm(path, options, (er, ...d) => (er ? rej(er) : res(...d))));
const rmdir = (path) => new Promise((res, rej) => fs_1.default.rmdir(path, (er, ...d) => (er ? rej(er) : res(...d))));
const stat = (path) => new Promise((res, rej) => fs_1.default.stat(path, (er, data) => (er ? rej(er) : res(data))));
const unlink = (path) => new Promise((res, rej) => fs_1.default.unlink(path, (er, ...d) => (er ? rej(er) : res(...d))));
exports.promises = {
chmod,
mkdir,
readdir,
rename,
rm,
rmdir,
stat,
unlink,
};
//# sourceMappingURL=fs.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/fs.ts"],"names":[],"mappings":"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"}
+2
View File
@@ -0,0 +1,2 @@
export declare const ignoreENOENT: (p: Promise<any>) => Promise<any>;
export declare const ignoreENOENTSync: (fn: () => any) => any;
+21
View File
@@ -0,0 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ignoreENOENTSync = exports.ignoreENOENT = void 0;
const ignoreENOENT = async (p) => p.catch(er => {
if (er.code !== 'ENOENT') {
throw er;
}
});
exports.ignoreENOENT = ignoreENOENT;
const ignoreENOENTSync = (fn) => {
try {
return fn();
}
catch (er) {
if (er?.code !== 'ENOENT') {
throw er;
}
}
};
exports.ignoreENOENTSync = ignoreENOENTSync;
//# sourceMappingURL=ignore-enoent.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"ignore-enoent.js","sourceRoot":"","sources":["../../../src/ignore-enoent.ts"],"names":[],"mappings":";;;AAEO,MAAM,YAAY,GAAG,KAAK,EAAE,CAAe,EAAE,EAAE,CACpD,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;IACX,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;QACxB,MAAM,EAAE,CAAA;KACT;AACH,CAAC,CAAC,CAAA;AALS,QAAA,YAAY,gBAKrB;AAEG,MAAM,gBAAgB,GAAG,CAAC,EAAa,EAAE,EAAE;IAChD,IAAI;QACF,OAAO,EAAE,EAAE,CAAA;KACZ;IAAC,OAAO,EAAE,EAAE;QACX,IAAK,EAAc,EAAE,IAAI,KAAK,QAAQ,EAAE;YACtC,MAAM,EAAE,CAAA;SACT;KACF;AACH,CAAC,CAAA;AARY,QAAA,gBAAgB,oBAQ5B"}
+56
View File
@@ -0,0 +1,56 @@
declare const _default: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
rimraf: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
rimrafSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
manual: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
manualSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
native: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
nativeSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
posix: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
posixSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
windows: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
windowsSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
moveRemove: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
moveRemoveSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
} & {
default: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
rimraf: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
rimrafSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
manual: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
manualSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
native: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
nativeSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
posix: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
posixSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
windows: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
windowsSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
moveRemove: ((path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => Promise<void>) & {
sync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
moveRemoveSync: (path: string | string[], opt?: import("./index.js").RimrafOptions | undefined) => void;
};
};
export = _default;
+7
View File
@@ -0,0 +1,7 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
const index_js_1 = __importDefault(require("./index.js"));
module.exports = Object.assign(index_js_1.default, { default: index_js_1.default });
//# sourceMappingURL=index-cjs.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index-cjs.js","sourceRoot":"","sources":["../../../src/index-cjs.ts"],"names":[],"mappings":";;;;AAAA,0DAA+B;AAE/B,iBAAS,MAAM,CAAC,MAAM,CAAC,kBAAM,EAAE,EAAE,OAAO,EAAE,kBAAM,EAAE,CAAC,CAAA"}
+60
View File
@@ -0,0 +1,60 @@
export interface RimrafOptions {
preserveRoot?: boolean;
tmp?: string;
maxRetries?: number;
retryDelay?: number;
backoff?: number;
maxBackoff?: number;
}
export declare const isRimrafOptions: (o: any) => o is RimrafOptions;
export declare const assertRimrafOptions: (o: any) => void;
export declare const nativeSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const native: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const manualSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const manual: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const windowsSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const windows: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const posixSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const posix: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const moveRemoveSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const moveRemove: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const rimrafSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const sync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const rimraf: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
rimraf: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
sync: (path: string | string[], opt?: RimrafOptions) => void;
rimrafSync: (path: string | string[], opt?: RimrafOptions) => void;
manual: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
manualSync: (path: string | string[], opt?: RimrafOptions) => void;
native: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
nativeSync: (path: string | string[], opt?: RimrafOptions) => void;
posix: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
posixSync: (path: string | string[], opt?: RimrafOptions) => void;
windows: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
windowsSync: (path: string | string[], opt?: RimrafOptions) => void;
moveRemove: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
moveRemoveSync: (path: string | string[], opt?: RimrafOptions) => void;
};
export default rimraf;
+79
View File
@@ -0,0 +1,79 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.rimraf = exports.sync = exports.rimrafSync = exports.moveRemove = exports.moveRemoveSync = exports.posix = exports.posixSync = exports.windows = exports.windowsSync = exports.manual = exports.manualSync = exports.native = exports.nativeSync = exports.assertRimrafOptions = exports.isRimrafOptions = void 0;
const opt_arg_js_1 = __importDefault(require("./opt-arg.js"));
const path_arg_js_1 = __importDefault(require("./path-arg.js"));
/* c8 ignore start */
const typeOrUndef = (val, t) => typeof val === 'undefined' || typeof val === t;
/* c8 ignore stop */
const isRimrafOptions = (o) => !!o &&
typeof o === 'object' &&
typeOrUndef(o.preserveRoot, 'boolean') &&
typeOrUndef(o.preserveRoot, 'number') &&
typeOrUndef(o.maxRetries, 'number') &&
typeOrUndef(o.retryDelay, 'number') &&
typeOrUndef(o.backoff, 'number') &&
typeOrUndef(o.maxBackoff, 'number');
exports.isRimrafOptions = isRimrafOptions;
/* c8 ignore start */
const assertRimrafOptions = (o) => {
if (!(0, exports.isRimrafOptions)(o)) {
throw new Error('invalid rimraf options');
}
};
exports.assertRimrafOptions = assertRimrafOptions;
/* c8 ignore stop */
const rimraf_manual_js_1 = require("./rimraf-manual.js");
const rimraf_move_remove_js_1 = require("./rimraf-move-remove.js");
const rimraf_native_js_1 = require("./rimraf-native.js");
const rimraf_posix_js_1 = require("./rimraf-posix.js");
const rimraf_windows_js_1 = require("./rimraf-windows.js");
const use_native_js_1 = require("./use-native.js");
const wrap = (fn) => async (path, opt) => {
const options = (0, opt_arg_js_1.default)(opt);
await (Array.isArray(path)
? Promise.all(path.map(p => fn((0, path_arg_js_1.default)(p, options), options)))
: fn((0, path_arg_js_1.default)(path, options), options));
};
const wrapSync = (fn) => (path, opt) => {
const options = (0, opt_arg_js_1.default)(opt);
return Array.isArray(path)
? path.forEach(p => fn((0, path_arg_js_1.default)(p, options), options))
: fn((0, path_arg_js_1.default)(path, options), options);
};
exports.nativeSync = wrapSync(rimraf_native_js_1.rimrafNativeSync);
exports.native = Object.assign(wrap(rimraf_native_js_1.rimrafNative), { sync: exports.nativeSync });
exports.manualSync = wrapSync(rimraf_manual_js_1.rimrafManualSync);
exports.manual = Object.assign(wrap(rimraf_manual_js_1.rimrafManual), { sync: exports.manualSync });
exports.windowsSync = wrapSync(rimraf_windows_js_1.rimrafWindowsSync);
exports.windows = Object.assign(wrap(rimraf_windows_js_1.rimrafWindows), { sync: exports.windowsSync });
exports.posixSync = wrapSync(rimraf_posix_js_1.rimrafPosixSync);
exports.posix = Object.assign(wrap(rimraf_posix_js_1.rimrafPosix), { sync: exports.posixSync });
exports.moveRemoveSync = wrapSync(rimraf_move_remove_js_1.rimrafMoveRemoveSync);
exports.moveRemove = Object.assign(wrap(rimraf_move_remove_js_1.rimrafMoveRemove), {
sync: exports.moveRemoveSync,
});
exports.rimrafSync = wrapSync((path, opt) => (0, use_native_js_1.useNativeSync)() ? (0, rimraf_native_js_1.rimrafNativeSync)(path, opt) : (0, rimraf_manual_js_1.rimrafManualSync)(path, opt));
exports.sync = exports.rimrafSync;
exports.rimraf = Object.assign(wrap((path, opt) => (0, use_native_js_1.useNative)() ? (0, rimraf_native_js_1.rimrafNative)(path, opt) : (0, rimraf_manual_js_1.rimrafManual)(path, opt)), {
// this weirdness because it's easier than explicitly declaring
rimraf: exports.manual,
sync: exports.rimrafSync,
rimrafSync: exports.rimrafSync,
manual: exports.manual,
manualSync: exports.manualSync,
native: exports.native,
nativeSync: exports.nativeSync,
posix: exports.posix,
posixSync: exports.posixSync,
windows: exports.windows,
windowsSync: exports.windowsSync,
moveRemove: exports.moveRemove,
moveRemoveSync: exports.moveRemoveSync,
});
exports.rimraf.rimraf = exports.rimraf;
exports.default = exports.rimraf;
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from './index.js';
declare const _default: (opt?: RimrafOptions) => RimrafOptions;
export default _default;
+8
View File
@@ -0,0 +1,8 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_js_1 = require("./index.js");
exports.default = (opt = {}) => {
(0, index_js_1.assertRimrafOptions)(opt);
return opt;
};
//# sourceMappingURL=opt-arg.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"opt-arg.js","sourceRoot":"","sources":["../../../src/opt-arg.ts"],"names":[],"mappings":";;AAAA,yCAA+D;AAC/D,kBAAe,CAAC,MAAqB,EAAE,EAAE,EAAE;IACzC,IAAA,8BAAmB,EAAC,GAAG,CAAC,CAAA;IACxB,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from './index.js';
declare const pathArg: (path: string, opt?: RimrafOptions) => string;
export default pathArg;
+54
View File
@@ -0,0 +1,54 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const platform_js_1 = __importDefault(require("./platform.js"));
const path_1 = require("path");
const util_1 = require("util");
const pathArg = (path, opt = {}) => {
const type = typeof path;
if (type !== 'string') {
const ctor = path && type === 'object' && path.constructor;
const received = ctor && ctor.name
? `an instance of ${ctor.name}`
: type === 'object'
? (0, util_1.inspect)(path)
: `type ${type} ${path}`;
const msg = 'The "path" argument must be of type string. ' + `Received ${received}`;
throw Object.assign(new TypeError(msg), {
path,
code: 'ERR_INVALID_ARG_TYPE',
});
}
if (/\0/.test(path)) {
// simulate same failure that node raises
const msg = 'path must be a string without null bytes';
throw Object.assign(new TypeError(msg), {
path,
code: 'ERR_INVALID_ARG_VALUE',
});
}
path = (0, path_1.resolve)(path);
const { root } = (0, path_1.parse)(path);
if (path === root && opt.preserveRoot !== false) {
const msg = 'refusing to remove root directory without preserveRoot:false';
throw Object.assign(new Error(msg), {
path,
code: 'ERR_PRESERVE_ROOT',
});
}
if (platform_js_1.default === 'win32') {
const badWinChars = /[*|"<>?:]/;
const { root } = (0, path_1.parse)(path);
if (badWinChars.test(path.substring(root.length))) {
throw Object.assign(new Error('Illegal characters in path.'), {
path,
code: 'EINVAL',
});
}
}
return path;
};
exports.default = pathArg;
//# sourceMappingURL=path-arg.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"path-arg.js","sourceRoot":"","sources":["../../../src/path-arg.ts"],"names":[],"mappings":";;;;;AAAA,gEAAoC;AACpC,+BAAqC;AACrC,+BAA8B;AAG9B,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,MAAqB,EAAE,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAA;IACxB,IAAI,IAAI,KAAK,QAAQ,EAAE;QACrB,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAA;QAC1D,MAAM,QAAQ,GACZ,IAAI,IAAI,IAAI,CAAC,IAAI;YACf,CAAC,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE;YAC/B,CAAC,CAAC,IAAI,KAAK,QAAQ;gBACnB,CAAC,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC;gBACf,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAA;QAC5B,MAAM,GAAG,GACP,8CAA8C,GAAG,YAAY,QAAQ,EAAE,CAAA;QACzE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;YACtC,IAAI;YACJ,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAA;KACH;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACnB,yCAAyC;QACzC,MAAM,GAAG,GAAG,0CAA0C,CAAA;QACtD,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;YACtC,IAAI;YACJ,IAAI,EAAE,uBAAuB;SAC9B,CAAC,CAAA;KACH;IAED,IAAI,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAA;IACpB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,YAAK,EAAC,IAAI,CAAC,CAAA;IAE5B,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,EAAE;QAC/C,MAAM,GAAG,GAAG,8DAA8D,CAAA;QAC1E,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YAClC,IAAI;YACJ,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAA;KACH;IAED,IAAI,qBAAQ,KAAK,OAAO,EAAE;QACxB,MAAM,WAAW,GAAG,WAAW,CAAA;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,YAAK,EAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;YACjD,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,EAAE;gBAC5D,IAAI;gBACJ,IAAI,EAAE,QAAQ;aACf,CAAC,CAAA;SACH;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,kBAAe,OAAO,CAAA"}
+2
View File
@@ -0,0 +1,2 @@
declare const _default: string;
export default _default;
+4
View File
@@ -0,0 +1,4 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = process.env.__TESTING_RIMRAF_PLATFORM__ || process.platform;
//# sourceMappingURL=platform.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/platform.ts"],"names":[],"mappings":";;AAAA,kBAAe,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,OAAO,CAAC,QAAQ,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
import { FsError } from './fs.js';
export declare const readdirOrError: (path: string) => Promise<string[] | FsError>;
export declare const readdirOrErrorSync: (path: string) => string[] | FsError;
+19
View File
@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.readdirOrErrorSync = exports.readdirOrError = void 0;
// returns an array of entries if readdir() works,
// or the error that readdir() raised if not.
const fs_js_1 = require("./fs.js");
const { readdir } = fs_js_1.promises;
const readdirOrError = (path) => readdir(path).catch(er => er);
exports.readdirOrError = readdirOrError;
const readdirOrErrorSync = (path) => {
try {
return (0, fs_js_1.readdirSync)(path);
}
catch (er) {
return er;
}
};
exports.readdirOrErrorSync = readdirOrErrorSync;
//# sourceMappingURL=readdir-or-error.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"readdir-or-error.js","sourceRoot":"","sources":["../../../src/readdir-or-error.ts"],"names":[],"mappings":";;;AAAA,kDAAkD;AAClD,6CAA6C;AAC7C,mCAAwD;AACxD,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAQ,CAAA;AACrB,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa,CAAC,CAAA;AAD7B,QAAA,cAAc,kBACe;AACnC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE;IACjD,IAAI;QACF,OAAO,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAA;KACzB;IAAC,OAAO,EAAE,EAAE;QACX,OAAO,EAAa,CAAA;KACrB;AACH,CAAC,CAAA;AANY,QAAA,kBAAkB,sBAM9B"}
+7
View File
@@ -0,0 +1,7 @@
import { RimrafOptions } from '.';
export declare const MAXBACKOFF = 200;
export declare const RATE = 1.2;
export declare const MAXRETRIES = 10;
export declare const codes: Set<string>;
export declare const retryBusy: (fn: (path: string) => Promise<any>) => (path: string, opt: RimrafOptions, backoff?: number, total?: number) => Promise<any>;
export declare const retryBusySync: (fn: (path: string) => any) => (path: string, opt: RimrafOptions) => any;
+68
View File
@@ -0,0 +1,68 @@
"use strict";
// note: max backoff is the maximum that any *single* backoff will do
Object.defineProperty(exports, "__esModule", { value: true });
exports.retryBusySync = exports.retryBusy = exports.codes = exports.MAXRETRIES = exports.RATE = exports.MAXBACKOFF = void 0;
exports.MAXBACKOFF = 200;
exports.RATE = 1.2;
exports.MAXRETRIES = 10;
exports.codes = new Set(['EMFILE', 'ENFILE', 'EBUSY']);
const retryBusy = (fn) => {
const method = async (path, opt, backoff = 1, total = 0) => {
const mbo = opt.maxBackoff || exports.MAXBACKOFF;
const rate = opt.backoff || exports.RATE;
const max = opt.maxRetries || exports.MAXRETRIES;
let retries = 0;
while (true) {
try {
return await fn(path);
}
catch (er) {
const fer = er;
if (fer?.path === path && fer?.code && exports.codes.has(fer.code)) {
backoff = Math.ceil(backoff * rate);
total = backoff + total;
if (total < mbo) {
return new Promise((res, rej) => {
setTimeout(() => {
method(path, opt, backoff, total).then(res, rej);
}, backoff);
});
}
if (retries < max) {
retries++;
continue;
}
}
throw er;
}
}
};
return method;
};
exports.retryBusy = retryBusy;
// just retries, no async so no backoff
const retryBusySync = (fn) => {
const method = (path, opt) => {
const max = opt.maxRetries || exports.MAXRETRIES;
let retries = 0;
while (true) {
try {
return fn(path);
}
catch (er) {
const fer = er;
if (fer?.path === path &&
fer?.code &&
exports.codes.has(fer.code) &&
retries < max) {
retries++;
continue;
}
throw er;
}
}
};
return method;
};
exports.retryBusySync = retryBusySync;
//# sourceMappingURL=retry-busy.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"retry-busy.js","sourceRoot":"","sources":["../../../src/retry-busy.ts"],"names":[],"mappings":";AAAA,qEAAqE;;;AAKxD,QAAA,UAAU,GAAG,GAAG,CAAA;AAChB,QAAA,IAAI,GAAG,GAAG,CAAA;AACV,QAAA,UAAU,GAAG,EAAE,CAAA;AACf,QAAA,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;AAEpD,MAAM,SAAS,GAAG,CAAC,EAAkC,EAAE,EAAE;IAC9D,MAAM,MAAM,GAAG,KAAK,EAClB,IAAY,EACZ,GAAkB,EAClB,OAAO,GAAG,CAAC,EACX,KAAK,GAAG,CAAC,EACT,EAAE;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,kBAAU,CAAA;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,IAAI,YAAI,CAAA;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,kBAAU,CAAA;QACxC,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE;YACX,IAAI;gBACF,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;aACtB;YAAC,OAAO,EAAE,EAAE;gBACX,MAAM,GAAG,GAAG,EAAa,CAAA;gBACzB,IAAI,GAAG,EAAE,IAAI,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,aAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBAC1D,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;oBACnC,KAAK,GAAG,OAAO,GAAG,KAAK,CAAA;oBACvB,IAAI,KAAK,GAAG,GAAG,EAAE;wBACf,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;4BAC9B,UAAU,CAAC,GAAG,EAAE;gCACd,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;4BAClD,CAAC,EAAE,OAAO,CAAC,CAAA;wBACb,CAAC,CAAC,CAAA;qBACH;oBACD,IAAI,OAAO,GAAG,GAAG,EAAE;wBACjB,OAAO,EAAE,CAAA;wBACT,SAAQ;qBACT;iBACF;gBACD,MAAM,EAAE,CAAA;aACT;SACF;IACH,CAAC,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AArCY,QAAA,SAAS,aAqCrB;AAED,uCAAuC;AAChC,MAAM,aAAa,GAAG,CAAC,EAAyB,EAAE,EAAE;IACzD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,GAAkB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,kBAAU,CAAA;QACxC,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE;YACX,IAAI;gBACF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;aAChB;YAAC,OAAO,EAAE,EAAE;gBACX,MAAM,GAAG,GAAG,EAAa,CAAA;gBACzB,IACE,GAAG,EAAE,IAAI,KAAK,IAAI;oBAClB,GAAG,EAAE,IAAI;oBACT,aAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBACnB,OAAO,GAAG,GAAG,EACb;oBACA,OAAO,EAAE,CAAA;oBACT,SAAQ;iBACT;gBACD,MAAM,EAAE,CAAA;aACT;SACF;IACH,CAAC,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAvBY,QAAA,aAAa,iBAuBzB"}
+2
View File
@@ -0,0 +1,2 @@
export declare const rimrafManual: ((path: string, opt: import("./index.js").RimrafOptions) => Promise<any>) | ((path: string, opt: import("./index.js").RimrafOptions, state?: symbol) => Promise<void>);
export declare const rimrafManualSync: (path: string, opt: import("./index.js").RimrafOptions, state?: symbol) => void;
+12
View File
@@ -0,0 +1,12 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.rimrafManualSync = exports.rimrafManual = void 0;
const platform_js_1 = __importDefault(require("./platform.js"));
const rimraf_posix_js_1 = require("./rimraf-posix.js");
const rimraf_windows_js_1 = require("./rimraf-windows.js");
exports.rimrafManual = platform_js_1.default === 'win32' ? rimraf_windows_js_1.rimrafWindows : rimraf_posix_js_1.rimrafPosix;
exports.rimrafManualSync = platform_js_1.default === 'win32' ? rimraf_windows_js_1.rimrafWindowsSync : rimraf_posix_js_1.rimrafPosixSync;
//# sourceMappingURL=rimraf-manual.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-manual.js","sourceRoot":"","sources":["../../../src/rimraf-manual.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAoC;AAEpC,uDAAgE;AAChE,2DAAsE;AAEzD,QAAA,YAAY,GAAG,qBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,iCAAa,CAAC,CAAC,CAAC,6BAAW,CAAA;AACjE,QAAA,gBAAgB,GAC3B,qBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,qCAAiB,CAAC,CAAC,CAAC,iCAAe,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from '.';
export declare const rimrafMoveRemove: (path: string, opt: RimrafOptions) => Promise<void>;
export declare const rimrafMoveRemoveSync: (path: string, opt: RimrafOptions) => void;
+124
View File
@@ -0,0 +1,124 @@
"use strict";
// https://youtu.be/uhRWMGBjlO8?t=537
//
// 1. readdir
// 2. for each entry
// a. if a non-empty directory, recurse
// b. if an empty directory, move to random hidden file name in $TEMP
// c. unlink/rmdir $TEMP
//
// This works around the fact that unlink/rmdir is non-atomic and takes
// a non-deterministic amount of time to complete.
//
// However, it is HELLA SLOW, like 2-10x slower than a naive recursive rm.
Object.defineProperty(exports, "__esModule", { value: true });
exports.rimrafMoveRemoveSync = exports.rimrafMoveRemove = void 0;
const path_1 = require("path");
const default_tmp_js_1 = require("./default-tmp.js");
const ignore_enoent_js_1 = require("./ignore-enoent.js");
const fs_js_1 = require("./fs.js");
const { rename, unlink, rmdir, chmod } = fs_js_1.promises;
const readdir_or_error_js_1 = require("./readdir-or-error.js");
// crypto.randomBytes is much slower, and Math.random() is enough here
const uniqueFilename = (path) => `.${(0, path_1.basename)(path)}.${Math.random()}`;
const unlinkFixEPERM = async (path) => unlink(path).catch((er) => {
if (er.code === 'EPERM') {
return chmod(path, 0o666).then(() => unlink(path), er2 => {
if (er2.code === 'ENOENT') {
return;
}
throw er;
});
}
else if (er.code === 'ENOENT') {
return;
}
throw er;
});
const unlinkFixEPERMSync = (path) => {
try {
(0, fs_js_1.unlinkSync)(path);
}
catch (er) {
if (er?.code === 'EPERM') {
try {
return (0, fs_js_1.chmodSync)(path, 0o666);
}
catch (er2) {
if (er2?.code === 'ENOENT') {
return;
}
throw er;
}
}
else if (er?.code === 'ENOENT') {
return;
}
throw er;
}
};
const rimrafMoveRemove = async (path, opt) => {
if (!opt.tmp) {
return (0, exports.rimrafMoveRemove)(path, { ...opt, tmp: await (0, default_tmp_js_1.defaultTmp)(path) });
}
if (path === opt.tmp && (0, path_1.parse)(path).root !== path) {
throw new Error('cannot delete temp directory used for deletion');
}
const entries = await (0, readdir_or_error_js_1.readdirOrError)(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
return await (0, ignore_enoent_js_1.ignoreENOENT)(tmpUnlink(path, opt.tmp, unlinkFixEPERM));
}
await Promise.all(entries.map(entry => (0, exports.rimrafMoveRemove)((0, path_1.resolve)(path, entry), opt)));
// we don't ever ACTUALLY try to unlink /, because that can never work
// but when preserveRoot is false, we could be operating on it.
// No need to check if preserveRoot is not false.
if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
return;
}
return await (0, ignore_enoent_js_1.ignoreENOENT)(tmpUnlink(path, opt.tmp, rmdir));
};
exports.rimrafMoveRemove = rimrafMoveRemove;
const tmpUnlink = async (path, tmp, rm) => {
const tmpFile = (0, path_1.resolve)(tmp, uniqueFilename(path));
await rename(path, tmpFile);
return await rm(tmpFile);
};
const rimrafMoveRemoveSync = (path, opt) => {
if (!opt.tmp) {
return (0, exports.rimrafMoveRemoveSync)(path, { ...opt, tmp: (0, default_tmp_js_1.defaultTmpSync)(path) });
}
const tmp = opt.tmp;
if (path === opt.tmp && (0, path_1.parse)(path).root !== path) {
throw new Error('cannot delete temp directory used for deletion');
}
const entries = (0, readdir_or_error_js_1.readdirOrErrorSync)(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
return (0, ignore_enoent_js_1.ignoreENOENTSync)(() => tmpUnlinkSync(path, tmp, unlinkFixEPERMSync));
}
for (const entry of entries) {
(0, exports.rimrafMoveRemoveSync)((0, path_1.resolve)(path, entry), opt);
}
if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
return;
}
return (0, ignore_enoent_js_1.ignoreENOENTSync)(() => tmpUnlinkSync(path, tmp, fs_js_1.rmdirSync));
};
exports.rimrafMoveRemoveSync = rimrafMoveRemoveSync;
const tmpUnlinkSync = (path, tmp, rmSync) => {
const tmpFile = (0, path_1.resolve)(tmp, uniqueFilename(path));
(0, fs_js_1.renameSync)(path, tmpFile);
return rmSync(tmpFile);
};
//# sourceMappingURL=rimraf-move-remove.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-move-remove.js","sourceRoot":"","sources":["../../../src/rimraf-move-remove.ts"],"names":[],"mappings":"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"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from '.';
export declare const rimrafNative: (path: string, opt: RimrafOptions) => Promise<void>;
export declare const rimrafNativeSync: (path: string, opt: RimrafOptions) => void;
+18
View File
@@ -0,0 +1,18 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.rimrafNativeSync = exports.rimrafNative = void 0;
const fs_js_1 = require("./fs.js");
const { rm } = fs_js_1.promises;
const rimrafNative = (path, opt) => rm(path, {
...opt,
force: true,
recursive: true,
});
exports.rimrafNative = rimrafNative;
const rimrafNativeSync = (path, opt) => (0, fs_js_1.rmSync)(path, {
...opt,
force: true,
recursive: true,
});
exports.rimrafNativeSync = rimrafNativeSync;
//# sourceMappingURL=rimraf-native.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-native.js","sourceRoot":"","sources":["../../../src/rimraf-native.ts"],"names":[],"mappings":";;;AACA,mCAA0C;AAC1C,MAAM,EAAE,EAAE,EAAE,GAAG,gBAAQ,CAAA;AAEhB,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,GAAkB,EAAE,EAAE,CAC/D,EAAE,CAAC,IAAI,EAAE;IACP,GAAG,GAAG;IACN,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;CAChB,CAAC,CAAA;AALS,QAAA,YAAY,gBAKrB;AAEG,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,GAAkB,EAAE,EAAE,CACnE,IAAA,cAAM,EAAC,IAAI,EAAE;IACX,GAAG,GAAG;IACN,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;CAChB,CAAC,CAAA;AALS,QAAA,gBAAgB,oBAKzB"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from '.';
export declare const rimrafPosix: (path: string, opt: RimrafOptions) => Promise<any>;
export declare const rimrafPosixSync: (path: string, opt: RimrafOptions) => any;
+56
View File
@@ -0,0 +1,56 @@
"use strict";
// the simple recursive removal, where unlink and rmdir are atomic
// Note that this approach does NOT work on Windows!
// We rmdir before unlink even though that is arguably less efficient
// (since the average folder contains >1 file, it means more system
// calls), because sunos will let root unlink a directory, and some
// SUPER weird breakage happens as a result.
Object.defineProperty(exports, "__esModule", { value: true });
exports.rimrafPosixSync = exports.rimrafPosix = void 0;
const fs_js_1 = require("./fs.js");
const { rmdir, unlink } = fs_js_1.promises;
const path_1 = require("path");
const readdir_or_error_js_1 = require("./readdir-or-error.js");
const ignore_enoent_js_1 = require("./ignore-enoent.js");
const rimrafPosix = async (path, opt) => {
const entries = await (0, readdir_or_error_js_1.readdirOrError)(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
return (0, ignore_enoent_js_1.ignoreENOENT)(unlink(path));
}
await Promise.all(entries.map(entry => (0, exports.rimrafPosix)((0, path_1.resolve)(path, entry), opt)));
// we don't ever ACTUALLY try to unlink /, because that can never work
// but when preserveRoot is false, we could be operating on it.
// No need to check if preserveRoot is not false.
if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
return;
}
return (0, ignore_enoent_js_1.ignoreENOENT)(rmdir(path));
};
exports.rimrafPosix = rimrafPosix;
const rimrafPosixSync = (path, opt) => {
const entries = (0, readdir_or_error_js_1.readdirOrErrorSync)(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
return (0, ignore_enoent_js_1.ignoreENOENTSync)(() => (0, fs_js_1.unlinkSync)(path));
}
for (const entry of entries) {
(0, exports.rimrafPosixSync)((0, path_1.resolve)(path, entry), opt);
}
if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
return;
}
return (0, ignore_enoent_js_1.ignoreENOENTSync)(() => (0, fs_js_1.rmdirSync)(path));
};
exports.rimrafPosixSync = rimrafPosixSync;
//# sourceMappingURL=rimraf-posix.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-posix.js","sourceRoot":"","sources":["../../../src/rimraf-posix.ts"],"names":[],"mappings":";AAAA,kEAAkE;AAClE,oDAAoD;AACpD,qEAAqE;AACrE,mEAAmE;AACnE,mEAAmE;AACnE,4CAA4C;;;AAE5C,mCAAyD;AACzD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,gBAAQ,CAAA;AAElC,+BAAqC;AAErC,+DAA0E;AAG1E,yDAAmE;AAE5D,MAAM,WAAW,GAAG,KAAK,EAAE,IAAY,EAAE,GAAkB,EAAE,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAc,EAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,OAAM;SACP;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,OAAO,CAAA;SACd;QACD,OAAO,IAAA,+BAAY,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;KAClC;IACD,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAA,cAAO,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAC7D,CAAA;IAED,sEAAsE;IACtE,+DAA+D;IAC/D,iDAAiD;IACjD,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,KAAK,IAAA,YAAK,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE;QAC3D,OAAM;KACP;IAED,OAAO,IAAA,+BAAY,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;AAClC,CAAC,CAAA;AAvBY,QAAA,WAAW,eAuBvB;AAEM,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,GAAkB,EAAE,EAAE;IAClE,MAAM,OAAO,GAAG,IAAA,wCAAkB,EAAC,IAAI,CAAC,CAAA;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,OAAM;SACP;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,OAAO,CAAA;SACd;QACD,OAAO,IAAA,mCAAgB,EAAC,GAAG,EAAE,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC,CAAA;KAChD;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,IAAA,uBAAe,EAAC,IAAA,cAAO,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAA;KAC3C;IAED,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,KAAK,IAAA,YAAK,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE;QAC3D,OAAM;KACP;IAED,OAAO,IAAA,mCAAgB,EAAC,GAAG,EAAE,CAAC,IAAA,iBAAS,EAAC,IAAI,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AApBY,QAAA,eAAe,mBAoB3B"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from '.';
export declare const rimrafWindows: (path: string, opt: RimrafOptions, state?: symbol) => Promise<void>;
export declare const rimrafWindowsSync: (path: string, opt: RimrafOptions, state?: symbol) => void;
+110
View File
@@ -0,0 +1,110 @@
"use strict";
// This is the same as rimrafPosix, with the following changes:
//
// 1. EBUSY, ENFILE, EMFILE trigger retries and/or exponential backoff
// 2. All non-directories are removed first and then all directories are
// removed in a second sweep.
// 3. If we hit ENOTEMPTY in the second sweep, fall back to move-remove on
// the that folder.
//
// Note: "move then remove" is 2-10 times slower, and just as unreliable.
Object.defineProperty(exports, "__esModule", { value: true });
exports.rimrafWindowsSync = exports.rimrafWindows = void 0;
const path_1 = require("path");
const ignore_enoent_js_1 = require("./ignore-enoent.js");
const fix_eperm_js_1 = require("./fix-eperm.js");
const readdir_or_error_js_1 = require("./readdir-or-error.js");
const retry_busy_js_1 = require("./retry-busy.js");
const rimraf_move_remove_js_1 = require("./rimraf-move-remove.js");
const fs_js_1 = require("./fs.js");
const { unlink, rmdir } = fs_js_1.promises;
const rimrafWindowsFile = (0, retry_busy_js_1.retryBusy)((0, fix_eperm_js_1.fixEPERM)(unlink));
const rimrafWindowsFileSync = (0, retry_busy_js_1.retryBusySync)((0, fix_eperm_js_1.fixEPERMSync)(fs_js_1.unlinkSync));
const rimrafWindowsDir = (0, retry_busy_js_1.retryBusy)((0, fix_eperm_js_1.fixEPERM)(rmdir));
const rimrafWindowsDirSync = (0, retry_busy_js_1.retryBusySync)((0, fix_eperm_js_1.fixEPERMSync)(fs_js_1.rmdirSync));
const rimrafWindowsDirMoveRemoveFallback = async (path, opt) => {
try {
await rimrafWindowsDir(path, opt);
}
catch (er) {
if (er?.code === 'ENOTEMPTY') {
return await (0, rimraf_move_remove_js_1.rimrafMoveRemove)(path, opt);
}
throw er;
}
};
const rimrafWindowsDirMoveRemoveFallbackSync = (path, opt) => {
try {
rimrafWindowsDirSync(path, opt);
}
catch (er) {
if (er?.code === 'ENOTEMPTY') {
return (0, rimraf_move_remove_js_1.rimrafMoveRemoveSync)(path, opt);
}
throw er;
}
};
const START = Symbol('start');
const CHILD = Symbol('child');
const FINISH = Symbol('finish');
const states = new Set([START, CHILD, FINISH]);
const rimrafWindows = async (path, opt, state = START) => {
if (!states.has(state)) {
throw new TypeError('invalid third argument passed to rimraf');
}
const entries = await (0, readdir_or_error_js_1.readdirOrError)(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
// is a file
return (0, ignore_enoent_js_1.ignoreENOENT)(rimrafWindowsFile(path, opt));
}
await Promise.all(entries.map(entry => (0, exports.rimrafWindows)((0, path_1.resolve)(path, entry), opt, state === START ? CHILD : state)));
if (state === START) {
return (0, exports.rimrafWindows)(path, opt, FINISH);
}
else if (state === FINISH) {
if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
return;
}
return (0, ignore_enoent_js_1.ignoreENOENT)(rimrafWindowsDirMoveRemoveFallback(path, opt));
}
};
exports.rimrafWindows = rimrafWindows;
const rimrafWindowsSync = (path, opt, state = START) => {
if (!states.has(state)) {
throw new TypeError('invalid third argument passed to rimraf');
}
const entries = (0, readdir_or_error_js_1.readdirOrErrorSync)(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
// is a file
return (0, ignore_enoent_js_1.ignoreENOENTSync)(() => rimrafWindowsFileSync(path, opt));
}
for (const entry of entries) {
const s = state === START ? CHILD : state;
(0, exports.rimrafWindowsSync)((0, path_1.resolve)(path, entry), opt, s);
}
if (state === START) {
return (0, exports.rimrafWindowsSync)(path, opt, FINISH);
}
else if (state === FINISH) {
if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
return;
}
return (0, ignore_enoent_js_1.ignoreENOENTSync)(() => {
rimrafWindowsDirMoveRemoveFallbackSync(path, opt);
});
}
};
exports.rimrafWindowsSync = rimrafWindowsSync;
//# sourceMappingURL=rimraf-windows.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-windows.js","sourceRoot":"","sources":["../../../src/rimraf-windows.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,gCAAgC;AAChC,0EAA0E;AAC1E,sBAAsB;AACtB,EAAE;AACF,yEAAyE;;;AAEzE,+BAAqC;AACrC,yDAAmE;AACnE,iDAAuD;AACvD,+DAA0E;AAC1E,mDAA0D;AAC1D,mEAAgF;AAChF,mCAAkE;AAElE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAQ,CAAA;AAElC,MAAM,iBAAiB,GAAG,IAAA,yBAAS,EAAC,IAAA,uBAAQ,EAAC,MAAM,CAAC,CAAC,CAAA;AACrD,MAAM,qBAAqB,GAAG,IAAA,6BAAa,EAAC,IAAA,2BAAY,EAAC,kBAAU,CAAC,CAAC,CAAA;AACrE,MAAM,gBAAgB,GAAG,IAAA,yBAAS,EAAC,IAAA,uBAAQ,EAAC,KAAK,CAAC,CAAC,CAAA;AACnD,MAAM,oBAAoB,GAAG,IAAA,6BAAa,EAAC,IAAA,2BAAY,EAAC,iBAAS,CAAC,CAAC,CAAA;AAEnE,MAAM,kCAAkC,GAAG,KAAK,EAC9C,IAAY,EACZ,GAAkB,EAClB,EAAE;IACF,IAAI;QACF,MAAM,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;KAClC;IAAC,OAAO,EAAE,EAAE;QACX,IAAK,EAAc,EAAE,IAAI,KAAK,WAAW,EAAE;YACzC,OAAO,MAAM,IAAA,wCAAgB,EAAC,IAAI,EAAE,GAAG,CAAC,CAAA;SACzC;QACD,MAAM,EAAE,CAAA;KACT;AACH,CAAC,CAAA;AAED,MAAM,sCAAsC,GAAG,CAC7C,IAAY,EACZ,GAAkB,EAClB,EAAE;IACF,IAAI;QACF,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;KAChC;IAAC,OAAO,EAAE,EAAE;QACX,IAAK,EAAc,EAAE,IAAI,KAAK,WAAW,EAAE;YACzC,OAAO,IAAA,4CAAoB,EAAC,IAAI,EAAE,GAAG,CAAC,CAAA;SACvC;QACD,MAAM,EAAE,CAAA;KACT;AACH,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AAEvC,MAAM,aAAa,GAAG,KAAK,EAChC,IAAY,EACZ,GAAkB,EAClB,KAAK,GAAG,KAAK,EACE,EAAE;IACjB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACtB,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAA;KAC/D;IAED,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAc,EAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,OAAM;SACP;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,OAAO,CAAA;SACd;QACD,YAAY;QACZ,OAAO,IAAA,+BAAY,EAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;KAClD;IAED,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAClB,IAAA,qBAAa,EAAC,IAAA,cAAO,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAC1E,CACF,CAAA;IAED,IAAI,KAAK,KAAK,KAAK,EAAE;QACnB,OAAO,IAAA,qBAAa,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;KACxC;SAAM,IAAI,KAAK,KAAK,MAAM,EAAE;QAC3B,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,KAAK,IAAA,YAAK,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE;YAC3D,OAAM;SACP;QACD,OAAO,IAAA,+BAAY,EAAC,kCAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;KACnE;AACH,CAAC,CAAA;AAnCY,QAAA,aAAa,iBAmCzB;AAEM,MAAM,iBAAiB,GAAG,CAC/B,IAAY,EACZ,GAAkB,EAClB,KAAK,GAAG,KAAK,EACP,EAAE;IACR,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACtB,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAA;KAC/D;IAED,MAAM,OAAO,GAAG,IAAA,wCAAkB,EAAC,IAAI,CAAC,CAAA;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,OAAM;SACP;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,OAAO,CAAA;SACd;QACD,YAAY;QACZ,OAAO,IAAA,mCAAgB,EAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;KAChE;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;QACzC,IAAA,yBAAiB,EAAC,IAAA,cAAO,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;KAChD;IAED,IAAI,KAAK,KAAK,KAAK,EAAE;QACnB,OAAO,IAAA,yBAAiB,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;KAC5C;SAAM,IAAI,KAAK,KAAK,MAAM,EAAE;QAC3B,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,KAAK,IAAA,YAAK,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE;YAC3D,OAAM;SACP;QACD,OAAO,IAAA,mCAAgB,EAAC,GAAG,EAAE;YAC3B,sCAAsC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;KACH;AACH,CAAC,CAAA;AApCY,QAAA,iBAAiB,qBAoC7B"}
+2
View File
@@ -0,0 +1,2 @@
export declare const useNative: () => boolean;
export declare const useNativeSync: () => boolean;
+15
View File
@@ -0,0 +1,15 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useNativeSync = exports.useNative = void 0;
const version = process.env.__TESTING_RIMRAF_NODE_VERSION__ || process.version;
const versArr = version.replace(/^v/, '').split('.');
const hasNative = +versArr[0] > 14 || (+versArr[0] === 14 && +versArr[1] >= 14);
// we do NOT use native by default on Windows, because Node's native
// rm implementation is less advanced. Change this code if that changes.
const platform_js_1 = __importDefault(require("./platform.js"));
exports.useNative = !hasNative || platform_js_1.default === 'win32' ? () => false : () => true;
exports.useNativeSync = !hasNative || platform_js_1.default === 'win32' ? () => false : () => true;
//# sourceMappingURL=use-native.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"use-native.js","sourceRoot":"","sources":["../../../src/use-native.ts"],"names":[],"mappings":";;;;;;AAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,OAAO,CAAC,OAAO,CAAA;AAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACpD,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAC/E,oEAAoE;AACpE,yEAAyE;AACzE,gEAAoC;AACvB,QAAA,SAAS,GACpB,CAAC,SAAS,IAAI,qBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAA;AAClD,QAAA,aAAa,GACxB,CAAC,SAAS,IAAI,qBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAA"}
+2
View File
@@ -0,0 +1,2 @@
export declare const defaultTmp: (path: string) => Promise<string>;
export declare const defaultTmpSync: (path: string) => string;
+55
View File
@@ -0,0 +1,55 @@
// The default temporary folder location for use in the windows algorithm.
// It's TEMPting to use dirname(path), since that's guaranteed to be on the
// same device. However, this means that:
// rimraf(path).then(() => rimraf(dirname(path)))
// will often fail with EBUSY, because the parent dir contains
// marked-for-deletion directory entries (which do not show up in readdir).
// The approach here is to use os.tmpdir() if it's on the same drive letter,
// or resolve(path, '\\temp') if it exists, or the root of the drive if not.
// On Posix (not that you'd be likely to use the windows algorithm there),
// it uses os.tmpdir() always.
import { tmpdir } from 'os';
import { parse, resolve } from 'path';
import { promises, statSync } from './fs.js';
import platform from './platform.js';
const { stat } = promises;
const isDirSync = (path) => {
try {
return statSync(path).isDirectory();
}
catch (er) {
return false;
}
};
const isDir = (path) => stat(path).then(st => st.isDirectory(), () => false);
const win32DefaultTmp = async (path) => {
const { root } = parse(path);
const tmp = tmpdir();
const { root: tmpRoot } = parse(tmp);
if (root.toLowerCase() === tmpRoot.toLowerCase()) {
return tmp;
}
const driveTmp = resolve(root, '/temp');
if (await isDir(driveTmp)) {
return driveTmp;
}
return root;
};
const win32DefaultTmpSync = (path) => {
const { root } = parse(path);
const tmp = tmpdir();
const { root: tmpRoot } = parse(tmp);
if (root.toLowerCase() === tmpRoot.toLowerCase()) {
return tmp;
}
const driveTmp = resolve(root, '/temp');
if (isDirSync(driveTmp)) {
return driveTmp;
}
return root;
};
const posixDefaultTmp = async () => tmpdir();
const posixDefaultTmpSync = () => tmpdir();
export const defaultTmp = platform === 'win32' ? win32DefaultTmp : posixDefaultTmp;
export const defaultTmpSync = platform === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync;
//# sourceMappingURL=default-tmp.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"default-tmp.js","sourceRoot":"","sources":["../../src/default-tmp.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,0CAA0C;AAC1C,iDAAiD;AACjD,8DAA8D;AAC9D,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,8BAA8B;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;AAEzB,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;IACjC,IAAI;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;KACpC;IAAC,OAAO,EAAE,EAAE;QACX,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACb,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EACtB,GAAG,EAAE,CAAC,KAAK,CACZ,CAAA;AAEH,MAAM,eAAe,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE;QAChD,OAAO,GAAG,CAAA;KACX;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE;QACzB,OAAO,QAAQ,CAAA;KAChB;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE;QAChD,OAAO,GAAG,CAAA;KACX;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;QACvB,OAAO,QAAQ,CAAA;KAChB;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;AAC5C,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAA;AAE1C,MAAM,CAAC,MAAM,UAAU,GACrB,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAA;AAC1D,MAAM,CAAC,MAAM,cAAc,GACzB,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAA"}
+2
View File
@@ -0,0 +1,2 @@
export declare const fixEPERM: (fn: (path: string) => Promise<any>) => (path: string) => Promise<any>;
export declare const fixEPERMSync: (fn: (path: string) => any) => (path: string) => any;
+53
View File
@@ -0,0 +1,53 @@
import { promises, chmodSync } from './fs.js';
const { chmod } = promises;
export const fixEPERM = (fn) => async (path) => {
try {
return await fn(path);
}
catch (er) {
const fer = er;
if (fer?.code === 'ENOENT') {
return;
}
if (fer?.code === 'EPERM') {
try {
await chmod(path, 0o666);
}
catch (er2) {
const fer2 = er2;
if (fer2?.code === 'ENOENT') {
return;
}
throw er;
}
return await fn(path);
}
throw er;
}
};
export const fixEPERMSync = (fn) => (path) => {
try {
return fn(path);
}
catch (er) {
const fer = er;
if (fer?.code === 'ENOENT') {
return;
}
if (fer?.code === 'EPERM') {
try {
chmodSync(path, 0o666);
}
catch (er2) {
const fer2 = er2;
if (fer2?.code === 'ENOENT') {
return;
}
throw er;
}
return fn(path);
}
throw er;
}
};
//# sourceMappingURL=fix-eperm.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"fix-eperm.js","sourceRoot":"","sources":["../../src/fix-eperm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAW,MAAM,SAAS,CAAA;AACtD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAA;AAE1B,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAC,EAAkC,EAAE,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7D,IAAI;QACF,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;KACtB;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAAa,CAAA;QACzB,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE;YAC1B,OAAM;SACP;QACD,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE;YACzB,IAAI;gBACF,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;aACzB;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,GAAc,CAAA;gBAC3B,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE;oBAC3B,OAAM;iBACP;gBACD,MAAM,EAAE,CAAA;aACT;YACD,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;SACtB;QACD,MAAM,EAAE,CAAA;KACT;AACH,CAAC,CAAA;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAyB,EAAE,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE;IAC1E,IAAI;QACF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;KAChB;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,EAAa,CAAA;QACzB,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE;YAC1B,OAAM;SACP;QACD,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE;YACzB,IAAI;gBACF,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;aACvB;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,GAAc,CAAA;gBAC3B,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE;oBAC3B,OAAM;iBACP;gBACD,MAAM,EAAE,CAAA;aACT;YACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;SAChB;QACD,MAAM,EAAE,CAAA;KACT;AACH,CAAC,CAAA"}
+18
View File
@@ -0,0 +1,18 @@
import fs from 'fs';
export type FsError = Error & {
code?: string;
path?: string;
};
export { chmodSync, mkdirSync, readdirSync, renameSync, rmdirSync, rmSync, statSync, unlinkSync, } from 'fs';
export declare const promises: {
chmod: (path: fs.PathLike, mode: fs.Mode) => Promise<void>;
mkdir: (path: fs.PathLike, options?: fs.Mode | (fs.MakeDirectoryOptions & {
recursive?: boolean | null;
}) | undefined | null) => Promise<string | undefined>;
readdir: (path: fs.PathLike) => Promise<string[]>;
rename: (oldPath: fs.PathLike, newPath: fs.PathLike) => Promise<void>;
rm: (path: fs.PathLike, options: fs.RmOptions) => Promise<void>;
rmdir: (path: fs.PathLike) => Promise<void>;
stat: (path: fs.PathLike) => Promise<fs.Stats>;
unlink: (path: fs.PathLike) => Promise<void>;
};
+27
View File
@@ -0,0 +1,27 @@
// promisify ourselves, because older nodes don't have fs.promises
import fs from 'fs';
// sync ones just take the sync version from node
export { chmodSync, mkdirSync, readdirSync, renameSync, rmdirSync, rmSync, statSync, unlinkSync, } from 'fs';
// unrolled for better inlining, this seems to get better performance
// than something like:
// const makeCb = (res, rej) => (er, ...d) => er ? rej(er) : res(...d)
// which would be a bit cleaner.
const chmod = (path, mode) => new Promise((res, rej) => fs.chmod(path, mode, (er, ...d) => (er ? rej(er) : res(...d))));
const mkdir = (path, options) => new Promise((res, rej) => fs.mkdir(path, options, (er, made) => (er ? rej(er) : res(made))));
const readdir = (path) => new Promise((res, rej) => fs.readdir(path, (er, data) => (er ? rej(er) : res(data))));
const rename = (oldPath, newPath) => new Promise((res, rej) => fs.rename(oldPath, newPath, (er, ...d) => (er ? rej(er) : res(...d))));
const rm = (path, options) => new Promise((res, rej) => fs.rm(path, options, (er, ...d) => (er ? rej(er) : res(...d))));
const rmdir = (path) => new Promise((res, rej) => fs.rmdir(path, (er, ...d) => (er ? rej(er) : res(...d))));
const stat = (path) => new Promise((res, rej) => fs.stat(path, (er, data) => (er ? rej(er) : res(data))));
const unlink = (path) => new Promise((res, rej) => fs.unlink(path, (er, ...d) => (er ? rej(er) : res(...d))));
export const promises = {
chmod,
mkdir,
readdir,
rename,
rm,
rmdir,
stat,
unlink,
};
//# sourceMappingURL=fs.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/fs.ts"],"names":[],"mappings":"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"}
+2
View File
@@ -0,0 +1,2 @@
export declare const ignoreENOENT: (p: Promise<any>) => Promise<any>;
export declare const ignoreENOENTSync: (fn: () => any) => any;
+16
View File
@@ -0,0 +1,16 @@
export const ignoreENOENT = async (p) => p.catch(er => {
if (er.code !== 'ENOENT') {
throw er;
}
});
export const ignoreENOENTSync = (fn) => {
try {
return fn();
}
catch (er) {
if (er?.code !== 'ENOENT') {
throw er;
}
}
};
//# sourceMappingURL=ignore-enoent.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"ignore-enoent.js","sourceRoot":"","sources":["../../src/ignore-enoent.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,CAAe,EAAE,EAAE,CACpD,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;IACX,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;QACxB,MAAM,EAAE,CAAA;KACT;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAa,EAAE,EAAE;IAChD,IAAI;QACF,OAAO,EAAE,EAAE,CAAA;KACZ;IAAC,OAAO,EAAE,EAAE;QACX,IAAK,EAAc,EAAE,IAAI,KAAK,QAAQ,EAAE;YACtC,MAAM,EAAE,CAAA;SACT;KACF;AACH,CAAC,CAAA"}
+60
View File
@@ -0,0 +1,60 @@
export interface RimrafOptions {
preserveRoot?: boolean;
tmp?: string;
maxRetries?: number;
retryDelay?: number;
backoff?: number;
maxBackoff?: number;
}
export declare const isRimrafOptions: (o: any) => o is RimrafOptions;
export declare const assertRimrafOptions: (o: any) => void;
export declare const nativeSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const native: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const manualSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const manual: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const windowsSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const windows: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const posixSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const posix: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const moveRemoveSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const moveRemove: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
export declare const rimrafSync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const sync: (path: string | string[], opt?: RimrafOptions) => void;
export declare const rimraf: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
rimraf: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
sync: (path: string | string[], opt?: RimrafOptions) => void;
rimrafSync: (path: string | string[], opt?: RimrafOptions) => void;
manual: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
manualSync: (path: string | string[], opt?: RimrafOptions) => void;
native: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
nativeSync: (path: string | string[], opt?: RimrafOptions) => void;
posix: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
posixSync: (path: string | string[], opt?: RimrafOptions) => void;
windows: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
windowsSync: (path: string | string[], opt?: RimrafOptions) => void;
moveRemove: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
sync: (path: string | string[], opt?: RimrafOptions) => void;
};
moveRemoveSync: (path: string | string[], opt?: RimrafOptions) => void;
};
export default rimraf;
+71
View File
@@ -0,0 +1,71 @@
import optArg from './opt-arg.js';
import pathArg from './path-arg.js';
/* c8 ignore start */
const typeOrUndef = (val, t) => typeof val === 'undefined' || typeof val === t;
/* c8 ignore stop */
export const isRimrafOptions = (o) => !!o &&
typeof o === 'object' &&
typeOrUndef(o.preserveRoot, 'boolean') &&
typeOrUndef(o.preserveRoot, 'number') &&
typeOrUndef(o.maxRetries, 'number') &&
typeOrUndef(o.retryDelay, 'number') &&
typeOrUndef(o.backoff, 'number') &&
typeOrUndef(o.maxBackoff, 'number');
/* c8 ignore start */
export const assertRimrafOptions = (o) => {
if (!isRimrafOptions(o)) {
throw new Error('invalid rimraf options');
}
};
/* c8 ignore stop */
import { rimrafManual, rimrafManualSync } from './rimraf-manual.js';
import { rimrafMoveRemove, rimrafMoveRemoveSync } from './rimraf-move-remove.js';
import { rimrafNative, rimrafNativeSync } from './rimraf-native.js';
import { rimrafPosix, rimrafPosixSync } from './rimraf-posix.js';
import { rimrafWindows, rimrafWindowsSync } from './rimraf-windows.js';
import { useNative, useNativeSync } from './use-native.js';
const wrap = (fn) => async (path, opt) => {
const options = optArg(opt);
await (Array.isArray(path)
? Promise.all(path.map(p => fn(pathArg(p, options), options)))
: fn(pathArg(path, options), options));
};
const wrapSync = (fn) => (path, opt) => {
const options = optArg(opt);
return Array.isArray(path)
? path.forEach(p => fn(pathArg(p, options), options))
: fn(pathArg(path, options), options);
};
export const nativeSync = wrapSync(rimrafNativeSync);
export const native = Object.assign(wrap(rimrafNative), { sync: nativeSync });
export const manualSync = wrapSync(rimrafManualSync);
export const manual = Object.assign(wrap(rimrafManual), { sync: manualSync });
export const windowsSync = wrapSync(rimrafWindowsSync);
export const windows = Object.assign(wrap(rimrafWindows), { sync: windowsSync });
export const posixSync = wrapSync(rimrafPosixSync);
export const posix = Object.assign(wrap(rimrafPosix), { sync: posixSync });
export const moveRemoveSync = wrapSync(rimrafMoveRemoveSync);
export const moveRemove = Object.assign(wrap(rimrafMoveRemove), {
sync: moveRemoveSync,
});
export const rimrafSync = wrapSync((path, opt) => useNativeSync() ? rimrafNativeSync(path, opt) : rimrafManualSync(path, opt));
export const sync = rimrafSync;
export const rimraf = Object.assign(wrap((path, opt) => useNative() ? rimrafNative(path, opt) : rimrafManual(path, opt)), {
// this weirdness because it's easier than explicitly declaring
rimraf: manual,
sync: rimrafSync,
rimrafSync: rimrafSync,
manual,
manualSync,
native,
nativeSync,
posix,
posixSync,
windows,
windowsSync,
moveRemove,
moveRemoveSync,
});
rimraf.rimraf = rimraf;
export default rimraf;
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from './index.js';
declare const _default: (opt?: RimrafOptions) => RimrafOptions;
export default _default;
+6
View File
@@ -0,0 +1,6 @@
import { assertRimrafOptions } from './index.js';
export default (opt = {}) => {
assertRimrafOptions(opt);
return opt;
};
//# sourceMappingURL=opt-arg.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"opt-arg.js","sourceRoot":"","sources":["../../src/opt-arg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,YAAY,CAAA;AAC/D,eAAe,CAAC,MAAqB,EAAE,EAAE,EAAE;IACzC,mBAAmB,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
{
"type": "module"
}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from './index.js';
declare const pathArg: (path: string, opt?: RimrafOptions) => string;
export default pathArg;
+49
View File
@@ -0,0 +1,49 @@
import platform from './platform.js';
import { resolve, parse } from 'path';
import { inspect } from 'util';
const pathArg = (path, opt = {}) => {
const type = typeof path;
if (type !== 'string') {
const ctor = path && type === 'object' && path.constructor;
const received = ctor && ctor.name
? `an instance of ${ctor.name}`
: type === 'object'
? inspect(path)
: `type ${type} ${path}`;
const msg = 'The "path" argument must be of type string. ' + `Received ${received}`;
throw Object.assign(new TypeError(msg), {
path,
code: 'ERR_INVALID_ARG_TYPE',
});
}
if (/\0/.test(path)) {
// simulate same failure that node raises
const msg = 'path must be a string without null bytes';
throw Object.assign(new TypeError(msg), {
path,
code: 'ERR_INVALID_ARG_VALUE',
});
}
path = resolve(path);
const { root } = parse(path);
if (path === root && opt.preserveRoot !== false) {
const msg = 'refusing to remove root directory without preserveRoot:false';
throw Object.assign(new Error(msg), {
path,
code: 'ERR_PRESERVE_ROOT',
});
}
if (platform === 'win32') {
const badWinChars = /[*|"<>?:]/;
const { root } = parse(path);
if (badWinChars.test(path.substring(root.length))) {
throw Object.assign(new Error('Illegal characters in path.'), {
path,
code: 'EINVAL',
});
}
}
return path;
};
export default pathArg;
//# sourceMappingURL=path-arg.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"path-arg.js","sourceRoot":"","sources":["../../src/path-arg.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAG9B,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,MAAqB,EAAE,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAA;IACxB,IAAI,IAAI,KAAK,QAAQ,EAAE;QACrB,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAA;QAC1D,MAAM,QAAQ,GACZ,IAAI,IAAI,IAAI,CAAC,IAAI;YACf,CAAC,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE;YAC/B,CAAC,CAAC,IAAI,KAAK,QAAQ;gBACnB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBACf,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAA;QAC5B,MAAM,GAAG,GACP,8CAA8C,GAAG,YAAY,QAAQ,EAAE,CAAA;QACzE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;YACtC,IAAI;YACJ,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAA;KACH;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACnB,yCAAyC;QACzC,MAAM,GAAG,GAAG,0CAA0C,CAAA;QACtD,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;YACtC,IAAI;YACJ,IAAI,EAAE,uBAAuB;SAC9B,CAAC,CAAA;KACH;IAED,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAE5B,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,EAAE;QAC/C,MAAM,GAAG,GAAG,8DAA8D,CAAA;QAC1E,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YAClC,IAAI;YACJ,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAA;KACH;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE;QACxB,MAAM,WAAW,GAAG,WAAW,CAAA;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;YACjD,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,EAAE;gBAC5D,IAAI;gBACJ,IAAI,EAAE,QAAQ;aACf,CAAC,CAAA;SACH;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
+2
View File
@@ -0,0 +1,2 @@
declare const _default: string;
export default _default;
+2
View File
@@ -0,0 +1,2 @@
export default process.env.__TESTING_RIMRAF_PLATFORM__ || process.platform;
//# sourceMappingURL=platform.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"AAAA,eAAe,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,OAAO,CAAC,QAAQ,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
import { FsError } from './fs.js';
export declare const readdirOrError: (path: string) => Promise<FsError | string[]>;
export declare const readdirOrErrorSync: (path: string) => FsError | string[];
+14
View File
@@ -0,0 +1,14 @@
// returns an array of entries if readdir() works,
// or the error that readdir() raised if not.
import { promises, readdirSync } from './fs.js';
const { readdir } = promises;
export const readdirOrError = (path) => readdir(path).catch(er => er);
export const readdirOrErrorSync = (path) => {
try {
return readdirSync(path);
}
catch (er) {
return er;
}
};
//# sourceMappingURL=readdir-or-error.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"readdir-or-error.js","sourceRoot":"","sources":["../../src/readdir-or-error.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,6CAA6C;AAC7C,OAAO,EAAW,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACxD,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAA;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa,CAAC,CAAA;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE;IACjD,IAAI;QACF,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;KACzB;IAAC,OAAO,EAAE,EAAE;QACX,OAAO,EAAa,CAAA;KACrB;AACH,CAAC,CAAA"}
+7
View File
@@ -0,0 +1,7 @@
import { RimrafOptions } from '.';
export declare const MAXBACKOFF = 200;
export declare const RATE = 1.2;
export declare const MAXRETRIES = 10;
export declare const codes: Set<string>;
export declare const retryBusy: (fn: (path: string) => Promise<any>) => (path: string, opt: RimrafOptions, backoff?: number, total?: number) => Promise<any>;
export declare const retryBusySync: (fn: (path: string) => any) => (path: string, opt: RimrafOptions) => any;
+63
View File
@@ -0,0 +1,63 @@
// note: max backoff is the maximum that any *single* backoff will do
export const MAXBACKOFF = 200;
export const RATE = 1.2;
export const MAXRETRIES = 10;
export const codes = new Set(['EMFILE', 'ENFILE', 'EBUSY']);
export const retryBusy = (fn) => {
const method = async (path, opt, backoff = 1, total = 0) => {
const mbo = opt.maxBackoff || MAXBACKOFF;
const rate = opt.backoff || RATE;
const max = opt.maxRetries || MAXRETRIES;
let retries = 0;
while (true) {
try {
return await fn(path);
}
catch (er) {
const fer = er;
if (fer?.path === path && fer?.code && codes.has(fer.code)) {
backoff = Math.ceil(backoff * rate);
total = backoff + total;
if (total < mbo) {
return new Promise((res, rej) => {
setTimeout(() => {
method(path, opt, backoff, total).then(res, rej);
}, backoff);
});
}
if (retries < max) {
retries++;
continue;
}
}
throw er;
}
}
};
return method;
};
// just retries, no async so no backoff
export const retryBusySync = (fn) => {
const method = (path, opt) => {
const max = opt.maxRetries || MAXRETRIES;
let retries = 0;
while (true) {
try {
return fn(path);
}
catch (er) {
const fer = er;
if (fer?.path === path &&
fer?.code &&
codes.has(fer.code) &&
retries < max) {
retries++;
continue;
}
throw er;
}
}
};
return method;
};
//# sourceMappingURL=retry-busy.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"retry-busy.js","sourceRoot":"","sources":["../../src/retry-busy.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAKrE,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;AAC7B,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAA;AACvB,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAA;AAC5B,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAkC,EAAE,EAAE;IAC9D,MAAM,MAAM,GAAG,KAAK,EAClB,IAAY,EACZ,GAAkB,EAClB,OAAO,GAAG,CAAC,EACX,KAAK,GAAG,CAAC,EACT,EAAE;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,UAAU,CAAA;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,CAAA;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,UAAU,CAAA;QACxC,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE;YACX,IAAI;gBACF,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAA;aACtB;YAAC,OAAO,EAAE,EAAE;gBACX,MAAM,GAAG,GAAG,EAAa,CAAA;gBACzB,IAAI,GAAG,EAAE,IAAI,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBAC1D,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;oBACnC,KAAK,GAAG,OAAO,GAAG,KAAK,CAAA;oBACvB,IAAI,KAAK,GAAG,GAAG,EAAE;wBACf,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;4BAC9B,UAAU,CAAC,GAAG,EAAE;gCACd,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;4BAClD,CAAC,EAAE,OAAO,CAAC,CAAA;wBACb,CAAC,CAAC,CAAA;qBACH;oBACD,IAAI,OAAO,GAAG,GAAG,EAAE;wBACjB,OAAO,EAAE,CAAA;wBACT,SAAQ;qBACT;iBACF;gBACD,MAAM,EAAE,CAAA;aACT;SACF;IACH,CAAC,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,uCAAuC;AACvC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAyB,EAAE,EAAE;IACzD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,GAAkB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,UAAU,CAAA;QACxC,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE;YACX,IAAI;gBACF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;aAChB;YAAC,OAAO,EAAE,EAAE;gBACX,MAAM,GAAG,GAAG,EAAa,CAAA;gBACzB,IACE,GAAG,EAAE,IAAI,KAAK,IAAI;oBAClB,GAAG,EAAE,IAAI;oBACT,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBACnB,OAAO,GAAG,GAAG,EACb;oBACA,OAAO,EAAE,CAAA;oBACT,SAAQ;iBACT;gBACD,MAAM,EAAE,CAAA;aACT;SACF;IACH,CAAC,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
+2
View File
@@ -0,0 +1,2 @@
export declare const rimrafManual: ((path: string, opt: import("./index.js").RimrafOptions) => Promise<any>) | ((path: string, opt: import("./index.js").RimrafOptions, state?: symbol) => Promise<void>);
export declare const rimrafManualSync: (path: string, opt: import("./index.js").RimrafOptions, state?: symbol) => void;
+6
View File
@@ -0,0 +1,6 @@
import platform from './platform.js';
import { rimrafPosix, rimrafPosixSync } from './rimraf-posix.js';
import { rimrafWindows, rimrafWindowsSync } from './rimraf-windows.js';
export const rimrafManual = platform === 'win32' ? rimrafWindows : rimrafPosix;
export const rimrafManualSync = platform === 'win32' ? rimrafWindowsSync : rimrafPosixSync;
//# sourceMappingURL=rimraf-manual.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-manual.js","sourceRoot":"","sources":["../../src/rimraf-manual.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEtE,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAA;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAC3B,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from '.';
export declare const rimrafMoveRemove: (path: string, opt: RimrafOptions) => Promise<void>;
export declare const rimrafMoveRemoveSync: (path: string, opt: RimrafOptions) => void;
+119
View File
@@ -0,0 +1,119 @@
// https://youtu.be/uhRWMGBjlO8?t=537
//
// 1. readdir
// 2. for each entry
// a. if a non-empty directory, recurse
// b. if an empty directory, move to random hidden file name in $TEMP
// c. unlink/rmdir $TEMP
//
// This works around the fact that unlink/rmdir is non-atomic and takes
// a non-deterministic amount of time to complete.
//
// However, it is HELLA SLOW, like 2-10x slower than a naive recursive rm.
import { basename, parse, resolve } from 'path';
import { defaultTmp, defaultTmpSync } from './default-tmp.js';
import { ignoreENOENT, ignoreENOENTSync } from './ignore-enoent.js';
import { chmodSync, promises as fsPromises, renameSync, rmdirSync, unlinkSync, } from './fs.js';
const { rename, unlink, rmdir, chmod } = fsPromises;
import { readdirOrError, readdirOrErrorSync } from './readdir-or-error.js';
// crypto.randomBytes is much slower, and Math.random() is enough here
const uniqueFilename = (path) => `.${basename(path)}.${Math.random()}`;
const unlinkFixEPERM = async (path) => unlink(path).catch((er) => {
if (er.code === 'EPERM') {
return chmod(path, 0o666).then(() => unlink(path), er2 => {
if (er2.code === 'ENOENT') {
return;
}
throw er;
});
}
else if (er.code === 'ENOENT') {
return;
}
throw er;
});
const unlinkFixEPERMSync = (path) => {
try {
unlinkSync(path);
}
catch (er) {
if (er?.code === 'EPERM') {
try {
return chmodSync(path, 0o666);
}
catch (er2) {
if (er2?.code === 'ENOENT') {
return;
}
throw er;
}
}
else if (er?.code === 'ENOENT') {
return;
}
throw er;
}
};
export const rimrafMoveRemove = async (path, opt) => {
if (!opt.tmp) {
return rimrafMoveRemove(path, { ...opt, tmp: await defaultTmp(path) });
}
if (path === opt.tmp && parse(path).root !== path) {
throw new Error('cannot delete temp directory used for deletion');
}
const entries = await readdirOrError(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
return await ignoreENOENT(tmpUnlink(path, opt.tmp, unlinkFixEPERM));
}
await Promise.all(entries.map(entry => rimrafMoveRemove(resolve(path, entry), opt)));
// we don't ever ACTUALLY try to unlink /, because that can never work
// but when preserveRoot is false, we could be operating on it.
// No need to check if preserveRoot is not false.
if (opt.preserveRoot === false && path === parse(path).root) {
return;
}
return await ignoreENOENT(tmpUnlink(path, opt.tmp, rmdir));
};
const tmpUnlink = async (path, tmp, rm) => {
const tmpFile = resolve(tmp, uniqueFilename(path));
await rename(path, tmpFile);
return await rm(tmpFile);
};
export const rimrafMoveRemoveSync = (path, opt) => {
if (!opt.tmp) {
return rimrafMoveRemoveSync(path, { ...opt, tmp: defaultTmpSync(path) });
}
const tmp = opt.tmp;
if (path === opt.tmp && parse(path).root !== path) {
throw new Error('cannot delete temp directory used for deletion');
}
const entries = readdirOrErrorSync(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
return ignoreENOENTSync(() => tmpUnlinkSync(path, tmp, unlinkFixEPERMSync));
}
for (const entry of entries) {
rimrafMoveRemoveSync(resolve(path, entry), opt);
}
if (opt.preserveRoot === false && path === parse(path).root) {
return;
}
return ignoreENOENTSync(() => tmpUnlinkSync(path, tmp, rmdirSync));
};
const tmpUnlinkSync = (path, tmp, rmSync) => {
const tmpFile = resolve(tmp, uniqueFilename(path));
renameSync(path, tmpFile);
return rmSync(tmpFile);
};
//# sourceMappingURL=rimraf-move-remove.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-move-remove.js","sourceRoot":"","sources":["../../src/rimraf-move-remove.ts"],"names":[],"mappings":"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"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from '.';
export declare const rimrafNative: (path: string, opt: RimrafOptions) => Promise<void>;
export declare const rimrafNativeSync: (path: string, opt: RimrafOptions) => void;
+13
View File
@@ -0,0 +1,13 @@
import { promises, rmSync } from './fs.js';
const { rm } = promises;
export const rimrafNative = (path, opt) => rm(path, {
...opt,
force: true,
recursive: true,
});
export const rimrafNativeSync = (path, opt) => rmSync(path, {
...opt,
force: true,
recursive: true,
});
//# sourceMappingURL=rimraf-native.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-native.js","sourceRoot":"","sources":["../../src/rimraf-native.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC1C,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAA;AAEvB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,GAAkB,EAAE,EAAE,CAC/D,EAAE,CAAC,IAAI,EAAE;IACP,GAAG,GAAG;IACN,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;CAChB,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,GAAkB,EAAE,EAAE,CACnE,MAAM,CAAC,IAAI,EAAE;IACX,GAAG,GAAG;IACN,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;CAChB,CAAC,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from '.';
export declare const rimrafPosix: (path: string, opt: RimrafOptions) => Promise<any>;
export declare const rimrafPosixSync: (path: string, opt: RimrafOptions) => any;
+51
View File
@@ -0,0 +1,51 @@
// the simple recursive removal, where unlink and rmdir are atomic
// Note that this approach does NOT work on Windows!
// We rmdir before unlink even though that is arguably less efficient
// (since the average folder contains >1 file, it means more system
// calls), because sunos will let root unlink a directory, and some
// SUPER weird breakage happens as a result.
import { promises, rmdirSync, unlinkSync } from './fs.js';
const { rmdir, unlink } = promises;
import { parse, resolve } from 'path';
import { readdirOrError, readdirOrErrorSync } from './readdir-or-error.js';
import { ignoreENOENT, ignoreENOENTSync } from './ignore-enoent.js';
export const rimrafPosix = async (path, opt) => {
const entries = await readdirOrError(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
return ignoreENOENT(unlink(path));
}
await Promise.all(entries.map(entry => rimrafPosix(resolve(path, entry), opt)));
// we don't ever ACTUALLY try to unlink /, because that can never work
// but when preserveRoot is false, we could be operating on it.
// No need to check if preserveRoot is not false.
if (opt.preserveRoot === false && path === parse(path).root) {
return;
}
return ignoreENOENT(rmdir(path));
};
export const rimrafPosixSync = (path, opt) => {
const entries = readdirOrErrorSync(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
return ignoreENOENTSync(() => unlinkSync(path));
}
for (const entry of entries) {
rimrafPosixSync(resolve(path, entry), opt);
}
if (opt.preserveRoot === false && path === parse(path).root) {
return;
}
return ignoreENOENTSync(() => rmdirSync(path));
};
//# sourceMappingURL=rimraf-posix.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rimraf-posix.js","sourceRoot":"","sources":["../../src/rimraf-posix.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,oDAAoD;AACpD,qEAAqE;AACrE,mEAAmE;AACnE,mEAAmE;AACnE,4CAA4C;AAE5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA;AAElC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAG1E,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEnE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,IAAY,EAAE,GAAkB,EAAE,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,OAAM;SACP;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,OAAO,CAAA;SACd;QACD,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;KAClC;IACD,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAC7D,CAAA;IAED,sEAAsE;IACtE,+DAA+D;IAC/D,iDAAiD;IACjD,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;QAC3D,OAAM;KACP;IAED,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,GAAkB,EAAE,EAAE;IAClE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7B,OAAM;SACP;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,OAAO,CAAA;SACd;QACD,OAAO,gBAAgB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;KAChD;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAA;KAC3C;IAED,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;QAC3D,OAAM;KACP;IAED,OAAO,gBAAgB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
import { RimrafOptions } from '.';
export declare const rimrafWindows: (path: string, opt: RimrafOptions, state?: symbol) => Promise<void>;
export declare const rimrafWindowsSync: (path: string, opt: RimrafOptions, state?: symbol) => void;
+105
View File
@@ -0,0 +1,105 @@
// This is the same as rimrafPosix, with the following changes:
//
// 1. EBUSY, ENFILE, EMFILE trigger retries and/or exponential backoff
// 2. All non-directories are removed first and then all directories are
// removed in a second sweep.
// 3. If we hit ENOTEMPTY in the second sweep, fall back to move-remove on
// the that folder.
//
// Note: "move then remove" is 2-10 times slower, and just as unreliable.
import { parse, resolve } from 'path';
import { ignoreENOENT, ignoreENOENTSync } from './ignore-enoent.js';
import { fixEPERM, fixEPERMSync } from './fix-eperm.js';
import { readdirOrError, readdirOrErrorSync } from './readdir-or-error.js';
import { retryBusy, retryBusySync } from './retry-busy.js';
import { rimrafMoveRemove, rimrafMoveRemoveSync } from './rimraf-move-remove.js';
import { promises, rmdirSync, unlinkSync } from './fs.js';
const { unlink, rmdir } = promises;
const rimrafWindowsFile = retryBusy(fixEPERM(unlink));
const rimrafWindowsFileSync = retryBusySync(fixEPERMSync(unlinkSync));
const rimrafWindowsDir = retryBusy(fixEPERM(rmdir));
const rimrafWindowsDirSync = retryBusySync(fixEPERMSync(rmdirSync));
const rimrafWindowsDirMoveRemoveFallback = async (path, opt) => {
try {
await rimrafWindowsDir(path, opt);
}
catch (er) {
if (er?.code === 'ENOTEMPTY') {
return await rimrafMoveRemove(path, opt);
}
throw er;
}
};
const rimrafWindowsDirMoveRemoveFallbackSync = (path, opt) => {
try {
rimrafWindowsDirSync(path, opt);
}
catch (er) {
if (er?.code === 'ENOTEMPTY') {
return rimrafMoveRemoveSync(path, opt);
}
throw er;
}
};
const START = Symbol('start');
const CHILD = Symbol('child');
const FINISH = Symbol('finish');
const states = new Set([START, CHILD, FINISH]);
export const rimrafWindows = async (path, opt, state = START) => {
if (!states.has(state)) {
throw new TypeError('invalid third argument passed to rimraf');
}
const entries = await readdirOrError(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
// is a file
return ignoreENOENT(rimrafWindowsFile(path, opt));
}
await Promise.all(entries.map(entry => rimrafWindows(resolve(path, entry), opt, state === START ? CHILD : state)));
if (state === START) {
return rimrafWindows(path, opt, FINISH);
}
else if (state === FINISH) {
if (opt.preserveRoot === false && path === parse(path).root) {
return;
}
return ignoreENOENT(rimrafWindowsDirMoveRemoveFallback(path, opt));
}
};
export const rimrafWindowsSync = (path, opt, state = START) => {
if (!states.has(state)) {
throw new TypeError('invalid third argument passed to rimraf');
}
const entries = readdirOrErrorSync(path);
if (!Array.isArray(entries)) {
if (entries.code === 'ENOENT') {
return;
}
if (entries.code !== 'ENOTDIR') {
throw entries;
}
// is a file
return ignoreENOENTSync(() => rimrafWindowsFileSync(path, opt));
}
for (const entry of entries) {
const s = state === START ? CHILD : state;
rimrafWindowsSync(resolve(path, entry), opt, s);
}
if (state === START) {
return rimrafWindowsSync(path, opt, FINISH);
}
else if (state === FINISH) {
if (opt.preserveRoot === false && path === parse(path).root) {
return;
}
return ignoreENOENTSync(() => {
rimrafWindowsDirMoveRemoveFallbackSync(path, opt);
});
}
};
//# sourceMappingURL=rimraf-windows.js.map

Some files were not shown because too many files have changed in this diff Show More