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
+ export interface RimrafOptions {
2
+ preserveRoot?: boolean;
3
+ tmp?: string;
4
+ maxRetries?: number;
5
+ retryDelay?: number;
6
+ backoff?: number;
7
+ maxBackoff?: number;
8
+ }
9
+ export declare const isRimrafOptions: (o: any) => o is RimrafOptions;
10
+ export declare const assertRimrafOptions: (o: any) => void;
11
+ export declare const nativeSync: (path: string | string[], opt?: RimrafOptions) => void;
12
+ export declare const native: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
13
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
14
+ };
15
+ export declare const manualSync: (path: string | string[], opt?: RimrafOptions) => void;
16
+ export declare const manual: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
17
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
18
+ };
19
+ export declare const windowsSync: (path: string | string[], opt?: RimrafOptions) => void;
20
+ export declare const windows: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
21
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
22
+ };
23
+ export declare const posixSync: (path: string | string[], opt?: RimrafOptions) => void;
24
+ export declare const posix: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
25
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
26
+ };
27
+ export declare const moveRemoveSync: (path: string | string[], opt?: RimrafOptions) => void;
28
+ export declare const moveRemove: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
29
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
30
+ };
31
+ export declare const rimrafSync: (path: string | string[], opt?: RimrafOptions) => void;
32
+ export declare const sync: (path: string | string[], opt?: RimrafOptions) => void;
33
+ export declare const rimraf: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
34
+ rimraf: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
35
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
36
+ };
37
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
38
+ rimrafSync: (path: string | string[], opt?: RimrafOptions) => void;
39
+ manual: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
40
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
41
+ };
42
+ manualSync: (path: string | string[], opt?: RimrafOptions) => void;
43
+ native: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
44
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
45
+ };
46
+ nativeSync: (path: string | string[], opt?: RimrafOptions) => void;
47
+ posix: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
48
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
49
+ };
50
+ posixSync: (path: string | string[], opt?: RimrafOptions) => void;
51
+ windows: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
52
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
53
+ };
54
+ windowsSync: (path: string | string[], opt?: RimrafOptions) => void;
55
+ moveRemove: ((path: string | string[], opt?: RimrafOptions) => Promise<void>) & {
56
+ sync: (path: string | string[], opt?: RimrafOptions) => void;
57
+ };
58
+ moveRemoveSync: (path: string | string[], opt?: RimrafOptions) => void;
59
+ };
60
+ export default rimraf;
@@ -0,0 +1,71 @@
1
+ import optArg from './opt-arg';
2
+ import pathArg from './path-arg';
3
+ /* c8 ignore start */
4
+ const typeOrUndef = (val, t) => typeof val === 'undefined' || typeof val === t;
5
+ /* c8 ignore stop */
6
+ export const isRimrafOptions = (o) => !!o &&
7
+ typeof o === 'object' &&
8
+ typeOrUndef(o.preserveRoot, 'boolean') &&
9
+ typeOrUndef(o.preserveRoot, 'number') &&
10
+ typeOrUndef(o.maxRetries, 'number') &&
11
+ typeOrUndef(o.retryDelay, 'number') &&
12
+ typeOrUndef(o.backoff, 'number') &&
13
+ typeOrUndef(o.maxBackoff, 'number');
14
+ /* c8 ignore start */
15
+ export const assertRimrafOptions = (o) => {
16
+ if (!isRimrafOptions(o)) {
17
+ throw new Error('invalid rimraf options');
18
+ }
19
+ };
20
+ /* c8 ignore stop */
21
+ import { rimrafManual, rimrafManualSync } from './rimraf-manual';
22
+ import { rimrafMoveRemove, rimrafMoveRemoveSync } from './rimraf-move-remove';
23
+ import { rimrafNative, rimrafNativeSync } from './rimraf-native';
24
+ import { rimrafPosix, rimrafPosixSync } from './rimraf-posix';
25
+ import { rimrafWindows, rimrafWindowsSync } from './rimraf-windows';
26
+ import { useNative, useNativeSync } from './use-native';
27
+ const wrap = (fn) => async (path, opt) => {
28
+ const options = optArg(opt);
29
+ await (Array.isArray(path)
30
+ ? Promise.all(path.map(p => fn(pathArg(p, options), options)))
31
+ : fn(pathArg(path, options), options));
32
+ };
33
+ const wrapSync = (fn) => (path, opt) => {
34
+ const options = optArg(opt);
35
+ return Array.isArray(path)
36
+ ? path.forEach(p => fn(pathArg(p, options), options))
37
+ : fn(pathArg(path, options), options);
38
+ };
39
+ export const nativeSync = wrapSync(rimrafNativeSync);
40
+ export const native = Object.assign(wrap(rimrafNative), { sync: nativeSync });
41
+ export const manualSync = wrapSync(rimrafManualSync);
42
+ export const manual = Object.assign(wrap(rimrafManual), { sync: manualSync });
43
+ export const windowsSync = wrapSync(rimrafWindowsSync);
44
+ export const windows = Object.assign(wrap(rimrafWindows), { sync: windowsSync });
45
+ export const posixSync = wrapSync(rimrafPosixSync);
46
+ export const posix = Object.assign(wrap(rimrafPosix), { sync: posixSync });
47
+ export const moveRemoveSync = wrapSync(rimrafMoveRemoveSync);
48
+ export const moveRemove = Object.assign(wrap(rimrafMoveRemove), {
49
+ sync: moveRemoveSync,
50
+ });
51
+ export const rimrafSync = wrapSync((path, opt) => useNativeSync() ? rimrafNativeSync(path, opt) : rimrafManualSync(path, opt));
52
+ export const sync = rimrafSync;
53
+ export const rimraf = Object.assign(wrap((path, opt) => useNative() ? rimrafNative(path, opt) : rimrafManual(path, opt)), {
54
+ // this weirdness because it's easier than explicitly declaring
55
+ rimraf: manual,
56
+ sync: rimrafSync,
57
+ rimrafSync: rimrafSync,
58
+ manual,
59
+ manualSync,
60
+ native,
61
+ nativeSync,
62
+ posix,
63
+ posixSync,
64
+ windows,
65
+ windowsSync,
66
+ moveRemove,
67
+ moveRemoveSync,
68
+ });
69
+ rimraf.rimraf = rimraf;
70
+ export default rimraf;
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { RimrafOptions } from './index';
2
+ declare const _default: (opt?: RimrafOptions) => RimrafOptions;
3
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { assertRimrafOptions } from './index';
2
+ export default (opt = {}) => {
3
+ assertRimrafOptions(opt);
4
+ return opt;
5
+ };
6
+ //# sourceMappingURL=opt-arg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opt-arg.js","sourceRoot":"","sources":["../../../src/opt-arg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,SAAS,CAAA;AAC5D,eAAe,CAAC,MAAqB,EAAE,EAAE,EAAE;IACzC,mBAAmB,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { RimrafOptions } from './index';
2
+ declare const pathArg: (path: string, opt?: RimrafOptions) => string;
3
+ export default pathArg;
@@ -0,0 +1,49 @@
1
+ import platform from './platform';
2
+ import { resolve, parse } from 'path';
3
+ import { inspect } from 'util';
4
+ const pathArg = (path, opt = {}) => {
5
+ const type = typeof path;
6
+ if (type !== 'string') {
7
+ const ctor = path && type === 'object' && path.constructor;
8
+ const received = ctor && ctor.name
9
+ ? `an instance of ${ctor.name}`
10
+ : type === 'object'
11
+ ? inspect(path)
12
+ : `type ${type} ${path}`;
13
+ const msg = 'The "path" argument must be of type string. ' + `Received ${received}`;
14
+ throw Object.assign(new TypeError(msg), {
15
+ path,
16
+ code: 'ERR_INVALID_ARG_TYPE',
17
+ });
18
+ }
19
+ if (/\0/.test(path)) {
20
+ // simulate same failure that node raises
21
+ const msg = 'path must be a string without null bytes';
22
+ throw Object.assign(new TypeError(msg), {
23
+ path,
24
+ code: 'ERR_INVALID_ARG_VALUE',
25
+ });
26
+ }
27
+ path = resolve(path);
28
+ const { root } = parse(path);
29
+ if (path === root && opt.preserveRoot !== false) {
30
+ const msg = 'refusing to remove root directory without preserveRoot:false';
31
+ throw Object.assign(new Error(msg), {
32
+ path,
33
+ code: 'ERR_PRESERVE_ROOT',
34
+ });
35
+ }
36
+ if (platform === 'win32') {
37
+ const badWinChars = /[*|"<>?:]/;
38
+ const { root } = parse(path);
39
+ if (badWinChars.test(path.substring(root.length))) {
40
+ throw Object.assign(new Error('Illegal characters in path.'), {
41
+ path,
42
+ code: 'EINVAL',
43
+ });
44
+ }
45
+ }
46
+ return path;
47
+ };
48
+ export default pathArg;
49
+ //# sourceMappingURL=path-arg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-arg.js","sourceRoot":"","sources":["../../../src/path-arg.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,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"}
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ export default process.env.__TESTING_RIMRAF_PLATFORM__ || process.platform;
2
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,3 @@
1
+ import { FsError } from './fs';
2
+ export declare const readdirOrError: (path: string) => Promise<string[] | FsError>;
3
+ export declare const readdirOrErrorSync: (path: string) => string[] | FsError;
@@ -0,0 +1,14 @@
1
+ // returns an array of entries if readdir() works,
2
+ // or the error that readdir() raised if not.
3
+ import { promises, readdirSync } from './fs';
4
+ const { readdir } = promises;
5
+ export const readdirOrError = (path) => readdir(path).catch(er => er);
6
+ export const readdirOrErrorSync = (path) => {
7
+ try {
8
+ return readdirSync(path);
9
+ }
10
+ catch (er) {
11
+ return er;
12
+ }
13
+ };
14
+ //# sourceMappingURL=readdir-or-error.js.map
@@ -0,0 +1 @@
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,MAAM,CAAA;AACrD,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"}
@@ -0,0 +1,7 @@
1
+ import { RimrafOptions } from '.';
2
+ export declare const MAXBACKOFF = 200;
3
+ export declare const RATE = 1.2;
4
+ export declare const MAXRETRIES = 10;
5
+ export declare const codes: Set<string>;
6
+ export declare const retryBusy: (fn: (path: string) => Promise<any>) => (path: string, opt: RimrafOptions, backoff?: number, total?: number) => Promise<any>;
7
+ export declare const retryBusySync: (fn: (path: string) => any) => (path: string, opt: RimrafOptions) => any;
@@ -0,0 +1,60 @@
1
+ // note: max backoff is the maximum that any *single* backoff will do
2
+ export const MAXBACKOFF = 200;
3
+ export const RATE = 1.2;
4
+ export const MAXRETRIES = 10;
5
+ export const codes = new Set(['EMFILE', 'ENFILE', 'EBUSY']);
6
+ export const retryBusy = (fn) => {
7
+ const method = async (path, opt, backoff = 1, total = 0) => {
8
+ const mbo = opt.maxBackoff || MAXBACKOFF;
9
+ const rate = opt.backoff || RATE;
10
+ const max = opt.maxRetries || MAXRETRIES;
11
+ let retries = 0;
12
+ while (true) {
13
+ try {
14
+ return await fn(path);
15
+ }
16
+ catch (er) {
17
+ const fer = er;
18
+ if (fer?.code && codes.has(fer.code)) {
19
+ backoff = Math.ceil(backoff * rate);
20
+ total = backoff + total;
21
+ if (total < mbo) {
22
+ return new Promise((res, rej) => {
23
+ setTimeout(() => {
24
+ method(path, opt, backoff, total).then(res, rej);
25
+ }, backoff);
26
+ });
27
+ }
28
+ if (retries < max) {
29
+ retries++;
30
+ continue;
31
+ }
32
+ }
33
+ throw er;
34
+ }
35
+ }
36
+ };
37
+ return method;
38
+ };
39
+ // just retries, no async so no backoff
40
+ export const retryBusySync = (fn) => {
41
+ const method = (path, opt) => {
42
+ const max = opt.maxRetries || MAXRETRIES;
43
+ let retries = 0;
44
+ while (true) {
45
+ try {
46
+ return fn(path);
47
+ }
48
+ catch (er) {
49
+ const fer = er;
50
+ if (fer?.code && codes.has(fer.code) && retries < max) {
51
+ retries++;
52
+ continue;
53
+ }
54
+ throw er;
55
+ }
56
+ }
57
+ };
58
+ return method;
59
+ };
60
+ //# sourceMappingURL=retry-busy.js.map
@@ -0,0 +1 @@
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,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACpC,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,IAAI,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE;oBACrD,OAAO,EAAE,CAAA;oBACT,SAAQ;iBACT;gBACD,MAAM,EAAE,CAAA;aACT;SACF;IACH,CAAC,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const rimrafManual: ((path: string, opt: import(".").RimrafOptions) => Promise<any>) | ((path: string, opt: import(".").RimrafOptions, state?: symbol) => Promise<void>);
2
+ export declare const rimrafManualSync: (path: string, opt: import(".").RimrafOptions, state?: symbol) => void;
@@ -0,0 +1,6 @@
1
+ import platform from './platform';
2
+ import { rimrafPosix, rimrafPosixSync } from './rimraf-posix';
3
+ import { rimrafWindows, rimrafWindowsSync } from './rimraf-windows';
4
+ export const rimrafManual = platform === 'win32' ? rimrafWindows : rimrafPosix;
5
+ export const rimrafManualSync = platform === 'win32' ? rimrafWindowsSync : rimrafPosixSync;
6
+ //# sourceMappingURL=rimraf-manual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rimraf-manual.js","sourceRoot":"","sources":["../../../src/rimraf-manual.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEnE,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"}
@@ -0,0 +1,3 @@
1
+ import { RimrafOptions } from '.';
2
+ export declare const rimrafMoveRemove: (path: string, opt: RimrafOptions) => Promise<void>;
3
+ export declare const rimrafMoveRemoveSync: (path: string, opt: RimrafOptions) => void;
@@ -0,0 +1,119 @@
1
+ // https://youtu.be/uhRWMGBjlO8?t=537
2
+ //
3
+ // 1. readdir
4
+ // 2. for each entry
5
+ // a. if a non-empty directory, recurse
6
+ // b. if an empty directory, move to random hidden file name in $TEMP
7
+ // c. unlink/rmdir $TEMP
8
+ //
9
+ // This works around the fact that unlink/rmdir is non-atomic and takes
10
+ // a non-deterministic amount of time to complete.
11
+ //
12
+ // However, it is HELLA SLOW, like 2-10x slower than a naive recursive rm.
13
+ import { basename, parse, resolve } from 'path';
14
+ import { defaultTmp, defaultTmpSync } from './default-tmp';
15
+ import { ignoreENOENT, ignoreENOENTSync } from './ignore-enoent';
16
+ import { chmodSync, promises as fsPromises, renameSync, rmdirSync, unlinkSync, } from './fs';
17
+ const { rename, unlink, rmdir, chmod } = fsPromises;
18
+ import { readdirOrError, readdirOrErrorSync } from './readdir-or-error';
19
+ // crypto.randomBytes is much slower, and Math.random() is enough here
20
+ const uniqueFilename = (path) => `.${basename(path)}.${Math.random()}`;
21
+ const unlinkFixEPERM = async (path) => unlink(path).catch((er) => {
22
+ if (er.code === 'EPERM') {
23
+ return chmod(path, 0o666).then(() => unlink(path), er2 => {
24
+ if (er2.code === 'ENOENT') {
25
+ return;
26
+ }
27
+ throw er;
28
+ });
29
+ }
30
+ else if (er.code === 'ENOENT') {
31
+ return;
32
+ }
33
+ throw er;
34
+ });
35
+ const unlinkFixEPERMSync = (path) => {
36
+ try {
37
+ unlinkSync(path);
38
+ }
39
+ catch (er) {
40
+ if (er?.code === 'EPERM') {
41
+ try {
42
+ return chmodSync(path, 0o666);
43
+ }
44
+ catch (er2) {
45
+ if (er2?.code === 'ENOENT') {
46
+ return;
47
+ }
48
+ throw er;
49
+ }
50
+ }
51
+ else if (er?.code === 'ENOENT') {
52
+ return;
53
+ }
54
+ throw er;
55
+ }
56
+ };
57
+ export const rimrafMoveRemove = async (path, opt) => {
58
+ if (!opt.tmp) {
59
+ return rimrafMoveRemove(path, { ...opt, tmp: await defaultTmp(path) });
60
+ }
61
+ if (path === opt.tmp && parse(path).root !== path) {
62
+ throw new Error('cannot delete temp directory used for deletion');
63
+ }
64
+ const entries = await readdirOrError(path);
65
+ if (!Array.isArray(entries)) {
66
+ if (entries.code === 'ENOENT') {
67
+ return;
68
+ }
69
+ if (entries.code !== 'ENOTDIR') {
70
+ throw entries;
71
+ }
72
+ return await ignoreENOENT(tmpUnlink(path, opt.tmp, unlinkFixEPERM));
73
+ }
74
+ await Promise.all(entries.map(entry => rimrafMoveRemove(resolve(path, entry), opt)));
75
+ // we don't ever ACTUALLY try to unlink /, because that can never work
76
+ // but when preserveRoot is false, we could be operating on it.
77
+ // No need to check if preserveRoot is not false.
78
+ if (opt.preserveRoot === false && path === parse(path).root) {
79
+ return;
80
+ }
81
+ return await ignoreENOENT(tmpUnlink(path, opt.tmp, rmdir));
82
+ };
83
+ const tmpUnlink = async (path, tmp, rm) => {
84
+ const tmpFile = resolve(tmp, uniqueFilename(path));
85
+ await rename(path, tmpFile);
86
+ return await rm(tmpFile);
87
+ };
88
+ export const rimrafMoveRemoveSync = (path, opt) => {
89
+ if (!opt.tmp) {
90
+ return rimrafMoveRemoveSync(path, { ...opt, tmp: defaultTmpSync(path) });
91
+ }
92
+ const tmp = opt.tmp;
93
+ if (path === opt.tmp && parse(path).root !== path) {
94
+ throw new Error('cannot delete temp directory used for deletion');
95
+ }
96
+ const entries = readdirOrErrorSync(path);
97
+ if (!Array.isArray(entries)) {
98
+ if (entries.code === 'ENOENT') {
99
+ return;
100
+ }
101
+ if (entries.code !== 'ENOTDIR') {
102
+ throw entries;
103
+ }
104
+ return ignoreENOENTSync(() => tmpUnlinkSync(path, tmp, unlinkFixEPERMSync));
105
+ }
106
+ for (const entry of entries) {
107
+ rimrafMoveRemoveSync(resolve(path, entry), opt);
108
+ }
109
+ if (opt.preserveRoot === false && path === parse(path).root) {
110
+ return;
111
+ }
112
+ return ignoreENOENTSync(() => tmpUnlinkSync(path, tmp, rmdirSync));
113
+ };
114
+ const tmpUnlinkSync = (path, tmp, rmSync) => {
115
+ const tmpFile = resolve(tmp, uniqueFilename(path));
116
+ renameSync(path, tmpFile);
117
+ return rmSync(tmpFile);
118
+ };
119
+ //# sourceMappingURL=rimraf-move-remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rimraf-move-remove.js","sourceRoot":"","sources":["../../../src/rimraf-move-remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { RimrafOptions } from '.';
2
+ export declare const rimrafNative: (path: string, opt: RimrafOptions) => Promise<void>;
3
+ export declare const rimrafNativeSync: (path: string, opt: RimrafOptions) => void;
@@ -0,0 +1,13 @@
1
+ import { promises, rmSync } from './fs';
2
+ const { rm } = promises;
3
+ export const rimrafNative = (path, opt) => rm(path, {
4
+ ...opt,
5
+ force: true,
6
+ recursive: true,
7
+ });
8
+ export const rimrafNativeSync = (path, opt) => rmSync(path, {
9
+ ...opt,
10
+ force: true,
11
+ recursive: true,
12
+ });
13
+ //# sourceMappingURL=rimraf-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rimraf-native.js","sourceRoot":"","sources":["../../../src/rimraf-native.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AACvC,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"}
@@ -0,0 +1,3 @@
1
+ import { RimrafOptions } from '.';
2
+ export declare const rimrafPosix: (path: string, opt: RimrafOptions) => Promise<any>;
3
+ export declare const rimrafPosixSync: (path: string, opt: RimrafOptions) => any;
@@ -0,0 +1,55 @@
1
+ // the simple recursive removal, where unlink and rmdir are atomic
2
+ // Note that this approach does NOT work on Windows!
3
+ // We rmdir before unlink even though that is arguably less efficient
4
+ // (since the average folder contains >1 file, it means more system
5
+ // calls), because sunos will let root unlink a directory, and some
6
+ // SUPER weird breakage happens as a result.
7
+ import { promises, rmdirSync, unlinkSync } from './fs';
8
+ const { rmdir, unlink } = promises;
9
+ import { parse, resolve } from 'path';
10
+ import { readdirOrError, readdirOrErrorSync } from './readdir-or-error';
11
+ import { ignoreENOENT, ignoreENOENTSync } from './ignore-enoent';
12
+ export const rimrafPosix = async (path, opt) => {
13
+ const entries = await readdirOrError(path);
14
+ if (!Array.isArray(entries)) {
15
+ if (entries.code === 'ENOENT') {
16
+ return;
17
+ }
18
+ if (entries.code !== 'ENOTDIR') {
19
+ throw entries;
20
+ }
21
+ return ignoreENOENT(unlink(path));
22
+ }
23
+ await Promise.all(entries.map(entry => rimrafPosix(resolve(path, entry), opt)));
24
+ // we don't ever ACTUALLY try to unlink /, because that can never work
25
+ // but when preserveRoot is false, we could be operating on it.
26
+ // No need to check if preserveRoot is not false.
27
+ if (opt.preserveRoot === false && path === parse(path).root) {
28
+ return;
29
+ }
30
+ return ignoreENOENT(rmdir(path));
31
+ };
32
+ export const rimrafPosixSync = (path, opt) => {
33
+ const entries = readdirOrErrorSync(path);
34
+ if (!Array.isArray(entries)) {
35
+ if (entries.code === 'ENOENT') {
36
+ return;
37
+ }
38
+ if (entries.code !== 'ENOTDIR') {
39
+ throw entries;
40
+ }
41
+ return ignoreENOENTSync(() => unlinkSync(path));
42
+ }
43
+ for (const entry of entries) {
44
+ rimrafPosixSync(resolve(path, entry), opt);
45
+ }
46
+ if (opt.preserveRoot === false && path === parse(path).root) {
47
+ return;
48
+ }
49
+ return ignoreENOENTSync(() => rmdirSync(path));
50
+ };
51
+ module.exports = {
52
+ rimrafPosix,
53
+ rimrafPosixSync,
54
+ };
55
+ //# 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,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtD,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,oBAAoB,CAAA;AAGvE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEhE,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;AAED,MAAM,CAAC,OAAO,GAAG;IACf,WAAW;IACX,eAAe;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;