rimraf 3.0.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +128 -64
  3. package/dist/cjs/package.json +74 -0
  4. package/dist/cjs/src/bin.d.ts +7 -0
  5. package/dist/cjs/src/bin.js +144 -0
  6. package/dist/cjs/src/bin.js.map +1 -0
  7. package/dist/cjs/src/default-tmp.d.ts +2 -0
  8. package/dist/cjs/src/default-tmp.js +61 -0
  9. package/dist/cjs/src/default-tmp.js.map +1 -0
  10. package/dist/cjs/src/fix-eperm.d.ts +2 -0
  11. package/dist/cjs/src/fix-eperm.js +58 -0
  12. package/dist/cjs/src/fix-eperm.js.map +1 -0
  13. package/dist/cjs/src/fs.d.ts +17 -0
  14. package/dist/cjs/src/fs.js +41 -0
  15. package/dist/cjs/src/fs.js.map +1 -0
  16. package/dist/cjs/src/ignore-enoent.d.ts +2 -0
  17. package/dist/cjs/src/ignore-enoent.js +21 -0
  18. package/dist/cjs/src/ignore-enoent.js.map +1 -0
  19. package/dist/cjs/src/index.d.ts +60 -0
  20. package/dist/cjs/src/index.js +79 -0
  21. package/dist/cjs/src/index.js.map +1 -0
  22. package/dist/cjs/src/opt-arg.d.ts +3 -0
  23. package/dist/cjs/src/opt-arg.js +8 -0
  24. package/dist/cjs/src/opt-arg.js.map +1 -0
  25. package/dist/cjs/src/path-arg.d.ts +3 -0
  26. package/dist/cjs/src/path-arg.js +54 -0
  27. package/dist/cjs/src/path-arg.js.map +1 -0
  28. package/dist/cjs/src/platform.d.ts +2 -0
  29. package/dist/cjs/src/platform.js +4 -0
  30. package/dist/cjs/src/platform.js.map +1 -0
  31. package/dist/cjs/src/readdir-or-error.d.ts +3 -0
  32. package/dist/cjs/src/readdir-or-error.js +19 -0
  33. package/dist/cjs/src/readdir-or-error.js.map +1 -0
  34. package/dist/cjs/src/retry-busy.d.ts +7 -0
  35. package/dist/cjs/src/retry-busy.js +65 -0
  36. package/dist/cjs/src/retry-busy.js.map +1 -0
  37. package/dist/cjs/src/rimraf-manual.d.ts +2 -0
  38. package/dist/cjs/src/rimraf-manual.js +12 -0
  39. package/dist/cjs/src/rimraf-manual.js.map +1 -0
  40. package/dist/cjs/src/rimraf-move-remove.d.ts +3 -0
  41. package/dist/cjs/src/rimraf-move-remove.js +124 -0
  42. package/dist/cjs/src/rimraf-move-remove.js.map +1 -0
  43. package/dist/cjs/src/rimraf-native.d.ts +3 -0
  44. package/dist/cjs/src/rimraf-native.js +18 -0
  45. package/dist/cjs/src/rimraf-native.js.map +1 -0
  46. package/dist/cjs/src/rimraf-posix.d.ts +3 -0
  47. package/dist/cjs/src/rimraf-posix.js +60 -0
  48. package/dist/cjs/src/rimraf-posix.js.map +1 -0
  49. package/dist/cjs/src/rimraf-windows.d.ts +3 -0
  50. package/dist/cjs/src/rimraf-windows.js +110 -0
  51. package/dist/cjs/src/rimraf-windows.js.map +1 -0
  52. package/dist/cjs/src/use-native.d.ts +2 -0
  53. package/dist/cjs/src/use-native.js +9 -0
  54. package/dist/cjs/src/use-native.js.map +1 -0
  55. package/dist/mjs/package.json +74 -0
  56. package/dist/mjs/src/bin.d.ts +7 -0
  57. package/dist/mjs/src/bin.js +138 -0
  58. package/dist/mjs/src/bin.js.map +1 -0
  59. package/dist/mjs/src/default-tmp.d.ts +2 -0
  60. package/dist/mjs/src/default-tmp.js +55 -0
  61. package/dist/mjs/src/default-tmp.js.map +1 -0
  62. package/dist/mjs/src/fix-eperm.d.ts +2 -0
  63. package/dist/mjs/src/fix-eperm.js +53 -0
  64. package/dist/mjs/src/fix-eperm.js.map +1 -0
  65. package/dist/mjs/src/fs.d.ts +17 -0
  66. package/dist/mjs/src/fs.js +27 -0
  67. package/dist/mjs/src/fs.js.map +1 -0
  68. package/dist/mjs/src/ignore-enoent.d.ts +2 -0
  69. package/dist/mjs/src/ignore-enoent.js +16 -0
  70. package/dist/mjs/src/ignore-enoent.js.map +1 -0
  71. package/dist/mjs/src/index.d.ts +60 -0
  72. package/dist/mjs/src/index.js +71 -0
  73. package/dist/mjs/src/index.js.map +1 -0
  74. package/dist/mjs/src/opt-arg.d.ts +3 -0
  75. package/dist/mjs/src/opt-arg.js +6 -0
  76. package/dist/mjs/src/opt-arg.js.map +1 -0
  77. package/dist/mjs/src/path-arg.d.ts +3 -0
  78. package/dist/mjs/src/path-arg.js +49 -0
  79. package/dist/mjs/src/path-arg.js.map +1 -0
  80. package/dist/mjs/src/platform.d.ts +2 -0
  81. package/dist/mjs/src/platform.js +2 -0
  82. package/dist/mjs/src/platform.js.map +1 -0
  83. package/dist/mjs/src/readdir-or-error.d.ts +3 -0
  84. package/dist/mjs/src/readdir-or-error.js +14 -0
  85. package/dist/mjs/src/readdir-or-error.js.map +1 -0
  86. package/dist/mjs/src/retry-busy.d.ts +7 -0
  87. package/dist/mjs/src/retry-busy.js +60 -0
  88. package/dist/mjs/src/retry-busy.js.map +1 -0
  89. package/dist/mjs/src/rimraf-manual.d.ts +2 -0
  90. package/dist/mjs/src/rimraf-manual.js +6 -0
  91. package/dist/mjs/src/rimraf-manual.js.map +1 -0
  92. package/dist/mjs/src/rimraf-move-remove.d.ts +3 -0
  93. package/dist/mjs/src/rimraf-move-remove.js +119 -0
  94. package/dist/mjs/src/rimraf-move-remove.js.map +1 -0
  95. package/dist/mjs/src/rimraf-native.d.ts +3 -0
  96. package/dist/mjs/src/rimraf-native.js +13 -0
  97. package/dist/mjs/src/rimraf-native.js.map +1 -0
  98. package/dist/mjs/src/rimraf-posix.d.ts +3 -0
  99. package/dist/mjs/src/rimraf-posix.js +55 -0
  100. package/dist/mjs/src/rimraf-posix.js.map +1 -0
  101. package/dist/mjs/src/rimraf-windows.d.ts +3 -0
  102. package/dist/mjs/src/rimraf-windows.js +105 -0
  103. package/dist/mjs/src/rimraf-windows.js.map +1 -0
  104. package/dist/mjs/src/use-native.d.ts +2 -0
  105. package/dist/mjs/src/use-native.js +6 -0
  106. package/dist/mjs/src/use-native.js.map +1 -0
  107. package/package.json +57 -15
  108. package/CHANGELOG.md +0 -65
  109. package/bin.js +0 -68
  110. package/rimraf.js +0 -360
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ // the simple recursive removal, where unlink and rmdir are atomic
3
+ // Note that this approach does NOT work on Windows!
4
+ // We rmdir before unlink even though that is arguably less efficient
5
+ // (since the average folder contains >1 file, it means more system
6
+ // calls), because sunos will let root unlink a directory, and some
7
+ // SUPER weird breakage happens as a result.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.rimrafPosixSync = exports.rimrafPosix = void 0;
10
+ const fs_1 = require("./fs");
11
+ const { rmdir, unlink } = fs_1.promises;
12
+ const path_1 = require("path");
13
+ const readdir_or_error_1 = require("./readdir-or-error");
14
+ const ignore_enoent_1 = require("./ignore-enoent");
15
+ const rimrafPosix = async (path, opt) => {
16
+ const entries = await (0, readdir_or_error_1.readdirOrError)(path);
17
+ if (!Array.isArray(entries)) {
18
+ if (entries.code === 'ENOENT') {
19
+ return;
20
+ }
21
+ if (entries.code !== 'ENOTDIR') {
22
+ throw entries;
23
+ }
24
+ return (0, ignore_enoent_1.ignoreENOENT)(unlink(path));
25
+ }
26
+ await Promise.all(entries.map(entry => (0, exports.rimrafPosix)((0, path_1.resolve)(path, entry), opt)));
27
+ // we don't ever ACTUALLY try to unlink /, because that can never work
28
+ // but when preserveRoot is false, we could be operating on it.
29
+ // No need to check if preserveRoot is not false.
30
+ if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
31
+ return;
32
+ }
33
+ return (0, ignore_enoent_1.ignoreENOENT)(rmdir(path));
34
+ };
35
+ exports.rimrafPosix = rimrafPosix;
36
+ const rimrafPosixSync = (path, opt) => {
37
+ const entries = (0, readdir_or_error_1.readdirOrErrorSync)(path);
38
+ if (!Array.isArray(entries)) {
39
+ if (entries.code === 'ENOENT') {
40
+ return;
41
+ }
42
+ if (entries.code !== 'ENOTDIR') {
43
+ throw entries;
44
+ }
45
+ return (0, ignore_enoent_1.ignoreENOENTSync)(() => (0, fs_1.unlinkSync)(path));
46
+ }
47
+ for (const entry of entries) {
48
+ (0, exports.rimrafPosixSync)((0, path_1.resolve)(path, entry), opt);
49
+ }
50
+ if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
51
+ return;
52
+ }
53
+ return (0, ignore_enoent_1.ignoreENOENTSync)(() => (0, fs_1.rmdirSync)(path));
54
+ };
55
+ exports.rimrafPosixSync = rimrafPosixSync;
56
+ module.exports = {
57
+ rimrafPosix: exports.rimrafPosix,
58
+ rimrafPosixSync: exports.rimrafPosixSync,
59
+ };
60
+ //# sourceMappingURL=rimraf-posix.js.map
@@ -0,0 +1 @@
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,6BAAsD;AACtD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAQ,CAAA;AAElC,+BAAqC;AAErC,yDAAuE;AAGvE,mDAAgE;AAEzD,MAAM,WAAW,GAAG,KAAK,EAAE,IAAY,EAAE,GAAkB,EAAE,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAc,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,4BAAY,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,4BAAY,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,qCAAkB,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,gCAAgB,EAAC,GAAG,EAAE,CAAC,IAAA,eAAU,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,gCAAgB,EAAC,GAAG,EAAE,CAAC,IAAA,cAAS,EAAC,IAAI,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AApBY,QAAA,eAAe,mBAoB3B;AAED,MAAM,CAAC,OAAO,GAAG;IACf,WAAW,EAAX,mBAAW;IACX,eAAe,EAAf,uBAAe;CAChB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { RimrafOptions } from '.';
2
+ export declare const rimrafWindows: (path: string, opt: RimrafOptions, state?: symbol) => Promise<void>;
3
+ export declare const rimrafWindowsSync: (path: string, opt: RimrafOptions, state?: symbol) => void;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ // This is the same as rimrafPosix, with the following changes:
3
+ //
4
+ // 1. EBUSY, ENFILE, EMFILE trigger retries and/or exponential backoff
5
+ // 2. All non-directories are removed first and then all directories are
6
+ // removed in a second sweep.
7
+ // 3. If we hit ENOTEMPTY in the second sweep, fall back to move-remove on
8
+ // the that folder.
9
+ //
10
+ // Note: "move then remove" is 2-10 times slower, and just as unreliable.
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.rimrafWindowsSync = exports.rimrafWindows = void 0;
13
+ const path_1 = require("path");
14
+ const ignore_enoent_1 = require("./ignore-enoent");
15
+ const fix_eperm_1 = require("./fix-eperm");
16
+ const readdir_or_error_1 = require("./readdir-or-error");
17
+ const retry_busy_1 = require("./retry-busy");
18
+ const rimraf_move_remove_1 = require("./rimraf-move-remove");
19
+ const fs_1 = require("./fs");
20
+ const { unlink, rmdir } = fs_1.promises;
21
+ const rimrafWindowsFile = (0, retry_busy_1.retryBusy)((0, fix_eperm_1.fixEPERM)(unlink));
22
+ const rimrafWindowsFileSync = (0, retry_busy_1.retryBusySync)((0, fix_eperm_1.fixEPERMSync)(fs_1.unlinkSync));
23
+ const rimrafWindowsDir = (0, retry_busy_1.retryBusy)((0, fix_eperm_1.fixEPERM)(rmdir));
24
+ const rimrafWindowsDirSync = (0, retry_busy_1.retryBusySync)((0, fix_eperm_1.fixEPERMSync)(fs_1.rmdirSync));
25
+ const rimrafWindowsDirMoveRemoveFallback = async (path, opt) => {
26
+ try {
27
+ await rimrafWindowsDir(path, opt);
28
+ }
29
+ catch (er) {
30
+ if (er?.code === 'ENOTEMPTY') {
31
+ return await (0, rimraf_move_remove_1.rimrafMoveRemove)(path, opt);
32
+ }
33
+ throw er;
34
+ }
35
+ };
36
+ const rimrafWindowsDirMoveRemoveFallbackSync = (path, opt) => {
37
+ try {
38
+ rimrafWindowsDirSync(path, opt);
39
+ }
40
+ catch (er) {
41
+ if (er?.code === 'ENOTEMPTY') {
42
+ return (0, rimraf_move_remove_1.rimrafMoveRemoveSync)(path, opt);
43
+ }
44
+ throw er;
45
+ }
46
+ };
47
+ const START = Symbol('start');
48
+ const CHILD = Symbol('child');
49
+ const FINISH = Symbol('finish');
50
+ const states = new Set([START, CHILD, FINISH]);
51
+ const rimrafWindows = async (path, opt, state = START) => {
52
+ if (!states.has(state)) {
53
+ throw new TypeError('invalid third argument passed to rimraf');
54
+ }
55
+ const entries = await (0, readdir_or_error_1.readdirOrError)(path);
56
+ if (!Array.isArray(entries)) {
57
+ if (entries.code === 'ENOENT') {
58
+ return;
59
+ }
60
+ if (entries.code !== 'ENOTDIR') {
61
+ throw entries;
62
+ }
63
+ // is a file
64
+ return (0, ignore_enoent_1.ignoreENOENT)(rimrafWindowsFile(path, opt));
65
+ }
66
+ await Promise.all(entries.map(entry => (0, exports.rimrafWindows)((0, path_1.resolve)(path, entry), opt, state === START ? CHILD : state)));
67
+ if (state === START) {
68
+ return (0, exports.rimrafWindows)(path, opt, FINISH);
69
+ }
70
+ else if (state === FINISH) {
71
+ if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
72
+ return;
73
+ }
74
+ return (0, ignore_enoent_1.ignoreENOENT)(rimrafWindowsDirMoveRemoveFallback(path, opt));
75
+ }
76
+ };
77
+ exports.rimrafWindows = rimrafWindows;
78
+ const rimrafWindowsSync = (path, opt, state = START) => {
79
+ if (!states.has(state)) {
80
+ throw new TypeError('invalid third argument passed to rimraf');
81
+ }
82
+ const entries = (0, readdir_or_error_1.readdirOrErrorSync)(path);
83
+ if (!Array.isArray(entries)) {
84
+ if (entries.code === 'ENOENT') {
85
+ return;
86
+ }
87
+ if (entries.code !== 'ENOTDIR') {
88
+ throw entries;
89
+ }
90
+ // is a file
91
+ return (0, ignore_enoent_1.ignoreENOENTSync)(() => rimrafWindowsFileSync(path, opt));
92
+ }
93
+ for (const entry of entries) {
94
+ const s = state === START ? CHILD : state;
95
+ (0, exports.rimrafWindowsSync)((0, path_1.resolve)(path, entry), opt, s);
96
+ }
97
+ if (state === START) {
98
+ return (0, exports.rimrafWindowsSync)(path, opt, FINISH);
99
+ }
100
+ else if (state === FINISH) {
101
+ if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
102
+ return;
103
+ }
104
+ return (0, ignore_enoent_1.ignoreENOENTSync)(() => {
105
+ rimrafWindowsDirMoveRemoveFallbackSync(path, opt);
106
+ });
107
+ }
108
+ };
109
+ exports.rimrafWindowsSync = rimrafWindowsSync;
110
+ //# sourceMappingURL=rimraf-windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rimraf-windows.js","sourceRoot":"","sources":["../../../src/rimraf-windows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const useNative: () => boolean;
2
+ export declare const useNativeSync: () => boolean;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useNativeSync = exports.useNative = void 0;
4
+ const version = process.env.__TESTING_RIMRAF_NODE_VERSION__ || process.version;
5
+ const versArr = version.replace(/^v/, '').split('.');
6
+ const hasNative = +versArr[0] > 14 || (+versArr[0] === 14 && +versArr[1] >= 14);
7
+ exports.useNative = !hasNative ? () => false : () => true;
8
+ exports.useNativeSync = !hasNative ? () => false : () => true;
9
+ //# sourceMappingURL=use-native.js.map
@@ -0,0 +1 @@
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;AAClE,QAAA,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAA;AACjD,QAAA,aAAa,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAA"}
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "rimraf",
3
+ "version": "4.0.0",
4
+ "main": "./dist/cjs/src/index.js",
5
+ "module": "./dist/mjs/src/index.js",
6
+ "bin": "./dist/cjs/src/bin.js",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/mjs/src/index.js",
10
+ "require": "./dist/cjs/src/index.js"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "description": "A deep deletion module for node (like `rm -rf`)",
17
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
18
+ "license": "ISC",
19
+ "repository": "git://github.com/isaacs/rimraf.git",
20
+ "scripts": {
21
+ "preversion": "npm test",
22
+ "postversion": "npm publish",
23
+ "prepublishOnly": "git push origin --follow-tags",
24
+ "preprepare": "rm -rf dist",
25
+ "prepare": "tsc -p tsconfig-cjs.json && tsc -p tsconfig-esm.json",
26
+ "postprepare": "bash fixup.sh",
27
+ "pretest": "npm run prepare",
28
+ "presnap": "npm run prepare",
29
+ "test": "c8 tap",
30
+ "snap": "c8 tap",
31
+ "format": "prettier --write . --loglevel warn",
32
+ "benchmark": "node benchmark/index.js",
33
+ "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
34
+ },
35
+ "prettier": {
36
+ "semi": false,
37
+ "printWidth": 80,
38
+ "tabWidth": 2,
39
+ "useTabs": false,
40
+ "singleQuote": true,
41
+ "jsxSingleQuote": false,
42
+ "bracketSameLine": true,
43
+ "arrowParens": "avoid",
44
+ "endOfLine": "lf"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^18.11.9",
48
+ "@types/tap": "^15.0.7",
49
+ "c8": "^7.12.0",
50
+ "eslint-config-prettier": "^8.6.0",
51
+ "mkdirp": "1",
52
+ "prettier": "^2.8.2",
53
+ "tap": "^16.3.3",
54
+ "ts-node": "^10.9.1",
55
+ "typedoc": "^0.23.21",
56
+ "typescript": "^4.9.3"
57
+ },
58
+ "tap": {
59
+ "coverage": false,
60
+ "libtap-settings": "libtap-settings.js",
61
+ "node-arg": [
62
+ "--no-warnings",
63
+ "--loader",
64
+ "ts-node/esm"
65
+ ],
66
+ "ts": false
67
+ },
68
+ "funding": {
69
+ "url": "https://github.com/sponsors/isaacs"
70
+ },
71
+ "engines": {
72
+ "node": ">=14"
73
+ }
74
+ }
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ export declare const help: string;
3
+ declare const main: {
4
+ (...args: string[]): Promise<1 | 0>;
5
+ help: string;
6
+ };
7
+ export default main;
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env node
2
+ import { version } from '../package.json';
3
+ import rimraf from './';
4
+ const runHelpForUsage = () => console.error('run `rimraf --help` for usage information');
5
+ export const help = `rimraf version ${version}
6
+
7
+ Usage: rimraf <path> [<path> ...]
8
+ Deletes all files and folders at "path", recursively.
9
+
10
+ Options:
11
+ -- Treat all subsequent arguments as paths
12
+ -h --help Display this usage info
13
+ --preserve-root Do not remove '/' recursively (default)
14
+ --no-preserve-root Do not treat '/' specially
15
+
16
+ --impl=<type> Specify the implementationt to use.
17
+ rimraf: choose the best option
18
+ native: the C++ implementation in Node.js
19
+ manual: the platform-specific JS implementation
20
+ posix: the Posix JS implementation
21
+ windows: the Windows JS implementation
22
+ move-remove: a slower Windows JS fallback implementation
23
+
24
+ Implementation-specific options:
25
+ --tmp=<path> Folder to hold temp files for 'move-remove' implementation
26
+ --max-retries=<n> maxRetries for the 'native' and 'windows' implementations
27
+ --retry-delay=<n> retryDelay for the 'native' implementation, default 100
28
+ --backoff=<n> Exponential backoff factor for retries (default: 1.2)
29
+ `;
30
+ import { parse, resolve } from 'path';
31
+ const main = async (...args) => {
32
+ if (process.env.__RIMRAF_TESTING_BIN_FAIL__ === '1') {
33
+ throw new Error('simulated rimraf failure');
34
+ }
35
+ const opt = {};
36
+ const paths = [];
37
+ let dashdash = false;
38
+ let impl = rimraf;
39
+ for (const arg of args) {
40
+ if (dashdash) {
41
+ paths.push(arg);
42
+ continue;
43
+ }
44
+ if (arg === '--') {
45
+ dashdash = true;
46
+ continue;
47
+ }
48
+ else if (arg === '-h' || arg === '--help') {
49
+ console.log(help);
50
+ return 0;
51
+ }
52
+ else if (arg === '--preserve-root') {
53
+ opt.preserveRoot = true;
54
+ continue;
55
+ }
56
+ else if (arg === '--no-preserve-root') {
57
+ opt.preserveRoot = false;
58
+ continue;
59
+ }
60
+ else if (/^--tmp=/.test(arg)) {
61
+ const val = arg.substring('--tmp='.length);
62
+ opt.tmp = val;
63
+ continue;
64
+ }
65
+ else if (/^--max-retries=/.test(arg)) {
66
+ const val = +arg.substring('--max-retries='.length);
67
+ opt.maxRetries = val;
68
+ continue;
69
+ }
70
+ else if (/^--retry-delay=/.test(arg)) {
71
+ const val = +arg.substring('--retry-delay='.length);
72
+ opt.retryDelay = val;
73
+ continue;
74
+ }
75
+ else if (/^--backoff=/.test(arg)) {
76
+ const val = +arg.substring('--backoff='.length);
77
+ opt.backoff = val;
78
+ continue;
79
+ }
80
+ else if (/^--impl=/.test(arg)) {
81
+ const val = arg.substring('--impl='.length);
82
+ switch (val) {
83
+ case 'rimraf':
84
+ impl = rimraf;
85
+ continue;
86
+ case 'native':
87
+ case 'manual':
88
+ case 'posix':
89
+ case 'windows':
90
+ impl = rimraf[val];
91
+ continue;
92
+ case 'move-remove':
93
+ impl = rimraf.moveRemove;
94
+ continue;
95
+ default:
96
+ console.error(`unknown implementation: ${val}`);
97
+ runHelpForUsage();
98
+ return 1;
99
+ }
100
+ }
101
+ else if (/^-/.test(arg)) {
102
+ console.error(`unknown option: ${arg}`);
103
+ runHelpForUsage();
104
+ return 1;
105
+ }
106
+ else {
107
+ paths.push(arg);
108
+ }
109
+ }
110
+ if (opt.preserveRoot !== false) {
111
+ for (const path of paths.map(p => resolve(p))) {
112
+ if (path === parse(path).root) {
113
+ console.error(`rimraf: it is dangerous to operate recursively on '/'`);
114
+ console.error('use --no-preserve-root to override this failsafe');
115
+ return 1;
116
+ }
117
+ }
118
+ }
119
+ if (!paths.length) {
120
+ console.error('rimraf: must provide a path to remove');
121
+ runHelpForUsage();
122
+ return 1;
123
+ }
124
+ await impl(paths, opt);
125
+ return 0;
126
+ };
127
+ main.help = help;
128
+ export default main;
129
+ if (typeof require === 'function' &&
130
+ typeof module === 'object' &&
131
+ require.main === module) {
132
+ const args = process.argv.slice(2);
133
+ main(...args).then(code => process.exit(code), er => {
134
+ console.error(er);
135
+ process.exit(1);
136
+ });
137
+ }
138
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const defaultTmp: (path: string) => Promise<string>;
2
+ export declare const defaultTmpSync: (path: string) => string;
@@ -0,0 +1,55 @@
1
+ // The default temporary folder location for use in the windows algorithm.
2
+ // It's TEMPting to use dirname(path), since that's guaranteed to be on the
3
+ // same device. However, this means that:
4
+ // rimraf(path).then(() => rimraf(dirname(path)))
5
+ // will often fail with EBUSY, because the parent dir contains
6
+ // marked-for-deletion directory entries (which do not show up in readdir).
7
+ // The approach here is to use os.tmpdir() if it's on the same drive letter,
8
+ // or resolve(path, '\\temp') if it exists, or the root of the drive if not.
9
+ // On Posix (not that you'd be likely to use the windows algorithm there),
10
+ // it uses os.tmpdir() always.
11
+ import { tmpdir } from 'os';
12
+ import { parse, resolve } from 'path';
13
+ import { promises, statSync } from './fs';
14
+ import platform from './platform';
15
+ const { stat } = promises;
16
+ const isDirSync = (path) => {
17
+ try {
18
+ return statSync(path).isDirectory();
19
+ }
20
+ catch (er) {
21
+ return false;
22
+ }
23
+ };
24
+ const isDir = (path) => stat(path).then(st => st.isDirectory(), () => false);
25
+ const win32DefaultTmp = async (path) => {
26
+ const { root } = parse(path);
27
+ const tmp = tmpdir();
28
+ const { root: tmpRoot } = parse(tmp);
29
+ if (root.toLowerCase() === tmpRoot.toLowerCase()) {
30
+ return tmp;
31
+ }
32
+ const driveTmp = resolve(root, '/temp');
33
+ if (await isDir(driveTmp)) {
34
+ return driveTmp;
35
+ }
36
+ return root;
37
+ };
38
+ const win32DefaultTmpSync = (path) => {
39
+ const { root } = parse(path);
40
+ const tmp = tmpdir();
41
+ const { root: tmpRoot } = parse(tmp);
42
+ if (root.toLowerCase() === tmpRoot.toLowerCase()) {
43
+ return tmp;
44
+ }
45
+ const driveTmp = resolve(root, '/temp');
46
+ if (isDirSync(driveTmp)) {
47
+ return driveTmp;
48
+ }
49
+ return root;
50
+ };
51
+ const posixDefaultTmp = async () => tmpdir();
52
+ const posixDefaultTmpSync = () => tmpdir();
53
+ export const defaultTmp = platform === 'win32' ? win32DefaultTmp : posixDefaultTmp;
54
+ export const defaultTmpSync = platform === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync;
55
+ //# sourceMappingURL=default-tmp.js.map
@@ -0,0 +1 @@
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,MAAM,CAAA;AACzC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,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"}
@@ -0,0 +1,2 @@
1
+ export declare const fixEPERM: (fn: (path: string) => Promise<any>) => (path: string) => Promise<any>;
2
+ export declare const fixEPERMSync: (fn: (path: string) => any) => (path: string) => any;
@@ -0,0 +1,53 @@
1
+ import { promises, chmodSync } from './fs';
2
+ const { chmod } = promises;
3
+ export const fixEPERM = (fn) => async (path) => {
4
+ try {
5
+ return await fn(path);
6
+ }
7
+ catch (er) {
8
+ const fer = er;
9
+ if (fer?.code === 'ENOENT') {
10
+ return;
11
+ }
12
+ if (fer?.code === 'EPERM') {
13
+ try {
14
+ await chmod(path, 0o666);
15
+ }
16
+ catch (er2) {
17
+ const fer2 = er2;
18
+ if (fer2?.code === 'ENOENT') {
19
+ return;
20
+ }
21
+ throw er;
22
+ }
23
+ return await fn(path);
24
+ }
25
+ throw er;
26
+ }
27
+ };
28
+ export const fixEPERMSync = (fn) => (path) => {
29
+ try {
30
+ return fn(path);
31
+ }
32
+ catch (er) {
33
+ const fer = er;
34
+ if (fer?.code === 'ENOENT') {
35
+ return;
36
+ }
37
+ if (fer?.code === 'EPERM') {
38
+ try {
39
+ chmodSync(path, 0o666);
40
+ }
41
+ catch (er2) {
42
+ const fer2 = er2;
43
+ if (fer2?.code === 'ENOENT') {
44
+ return;
45
+ }
46
+ throw er;
47
+ }
48
+ return fn(path);
49
+ }
50
+ throw er;
51
+ }
52
+ };
53
+ //# sourceMappingURL=fix-eperm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-eperm.js","sourceRoot":"","sources":["../../../src/fix-eperm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAW,MAAM,MAAM,CAAA;AACnD,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"}
@@ -0,0 +1,17 @@
1
+ import fs from 'fs';
2
+ export type FsError = Error & {
3
+ code?: string;
4
+ };
5
+ export { chmodSync, mkdirSync, readdirSync, renameSync, rmdirSync, rmSync, statSync, unlinkSync, } from 'fs';
6
+ export declare const promises: {
7
+ chmod: (path: fs.PathLike, mode: fs.Mode) => Promise<void>;
8
+ mkdir: (path: fs.PathLike, options?: fs.Mode | (fs.MakeDirectoryOptions & {
9
+ recursive?: boolean | null;
10
+ }) | undefined | null) => Promise<string | undefined>;
11
+ readdir: (path: fs.PathLike) => Promise<string[]>;
12
+ rename: (oldPath: fs.PathLike, newPath: fs.PathLike) => Promise<void>;
13
+ rm: (path: fs.PathLike, options: fs.RmOptions) => Promise<void>;
14
+ rmdir: (path: fs.PathLike) => Promise<void>;
15
+ stat: (path: fs.PathLike) => Promise<fs.Stats>;
16
+ unlink: (path: fs.PathLike) => Promise<void>;
17
+ };
@@ -0,0 +1,27 @@
1
+ // promisify ourselves, because older nodes don't have fs.promises
2
+ import fs from 'fs';
3
+ // sync ones just take the sync version from node
4
+ export { chmodSync, mkdirSync, readdirSync, renameSync, rmdirSync, rmSync, statSync, unlinkSync, } from 'fs';
5
+ // unrolled for better inlining, this seems to get better performance
6
+ // than something like:
7
+ // const makeCb = (res, rej) => (er, ...d) => er ? rej(er) : res(...d)
8
+ // which would be a bit cleaner.
9
+ const chmod = (path, mode) => new Promise((res, rej) => fs.chmod(path, mode, (er, ...d) => (er ? rej(er) : res(...d))));
10
+ const mkdir = (path, options) => new Promise((res, rej) => fs.mkdir(path, options, (er, made) => (er ? rej(er) : res(made))));
11
+ const readdir = (path) => new Promise((res, rej) => fs.readdir(path, (er, data) => (er ? rej(er) : res(data))));
12
+ const rename = (oldPath, newPath) => new Promise((res, rej) => fs.rename(oldPath, newPath, (er, ...d) => (er ? rej(er) : res(...d))));
13
+ const rm = (path, options) => new Promise((res, rej) => fs.rm(path, options, (er, ...d) => (er ? rej(er) : res(...d))));
14
+ const rmdir = (path) => new Promise((res, rej) => fs.rmdir(path, (er, ...d) => (er ? rej(er) : res(...d))));
15
+ const stat = (path) => new Promise((res, rej) => fs.stat(path, (er, data) => (er ? rej(er) : res(data))));
16
+ const unlink = (path) => new Promise((res, rej) => fs.unlink(path, (er, ...d) => (er ? rej(er) : res(...d))));
17
+ export const promises = {
18
+ chmod,
19
+ mkdir,
20
+ readdir,
21
+ rename,
22
+ rm,
23
+ rmdir,
24
+ stat,
25
+ unlink,
26
+ };
27
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const ignoreENOENT: (p: Promise<any>) => Promise<any>;
2
+ export declare const ignoreENOENTSync: (fn: () => any) => any;
@@ -0,0 +1,16 @@
1
+ export const ignoreENOENT = async (p) => p.catch(er => {
2
+ if (er.code !== 'ENOENT') {
3
+ throw er;
4
+ }
5
+ });
6
+ export const ignoreENOENTSync = (fn) => {
7
+ try {
8
+ return fn();
9
+ }
10
+ catch (er) {
11
+ if (er?.code !== 'ENOENT') {
12
+ throw er;
13
+ }
14
+ }
15
+ };
16
+ //# sourceMappingURL=ignore-enoent.js.map
@@ -0,0 +1 @@
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"}