|
1 | 1 | 'use strict'
|
2 | 2 |
|
3 |
| -const { promisify } = require('util') |
4 | 3 | const path = require('path')
|
5 |
| -const fs = require('fs') |
6 | 4 |
|
7 |
| -const readdir = promisify(fs.readdir) |
8 |
| -const unlink = promisify(fs.unlink) |
9 |
| -const mkdir = promisify(fs.mkdir) |
| 5 | +const { |
| 6 | + readdir, |
| 7 | + mkdir, |
| 8 | + rm |
| 9 | +} = require('node:fs/promises') |
10 | 10 |
|
11 | 11 | const rmDB = async (
|
12 | 12 | dir,
|
13 |
| - exclude = ['.gitkeep'], |
14 |
| - isThrownError |
| 13 | + exclude = ['.gitkeep'] |
15 | 14 | ) => {
|
16 | 15 | try {
|
17 |
| - const files = await readdir(dir) |
18 |
| - const promisesArr = files.map((file) => { |
19 |
| - if (exclude.every(exFile => exFile !== file)) { |
20 |
| - return unlink(path.join(dir, file)) |
| 16 | + const files = await readdir( |
| 17 | + dir, |
| 18 | + { withFileTypes: true } |
| 19 | + ) |
| 20 | + |
| 21 | + for (const dirent of files) { |
| 22 | + const { name } = dirent |
| 23 | + |
| 24 | + if ( |
| 25 | + !dirent.isFile() || |
| 26 | + exclude.some((exFile) => exFile === name) |
| 27 | + ) { |
| 28 | + continue |
21 | 29 | }
|
22 | 30 |
|
23 |
| - return null |
24 |
| - }) |
25 |
| - |
26 |
| - const res = await Promise.all(promisesArr) |
27 |
| - |
28 |
| - return res |
29 |
| - } catch (err) { |
30 |
| - if (!isThrownError) { |
31 |
| - return |
| 31 | + const filePath = path.join(dir, name) |
| 32 | + await rm( |
| 33 | + filePath, |
| 34 | + { |
| 35 | + force: true, |
| 36 | + maxRetries: 5, |
| 37 | + recursive: true, |
| 38 | + retryDelay: 200 |
| 39 | + } |
| 40 | + ) |
32 | 41 | }
|
33 |
| - |
34 |
| - throw err |
| 42 | + } catch (err) { |
| 43 | + console.log(err) |
35 | 44 | }
|
36 | 45 | }
|
37 | 46 |
|
38 | 47 | const rmAllFiles = async (dir, exclude) => {
|
39 | 48 | try {
|
40 |
| - await rmDB(dir, exclude, true) |
| 49 | + await rmDB(dir, exclude) |
| 50 | + await mkdir(dir, { recursive: true }) |
41 | 51 | } catch (err) {
|
42 |
| - if (err.syscall === 'scandir') { |
43 |
| - await mkdir(dir) |
44 |
| - } |
| 52 | + console.log(err) |
45 | 53 | }
|
46 | 54 | }
|
47 | 55 |
|
|
0 commit comments