@aminzer/traverse-directory 1.2.7 → 1.2.9
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.
|
@@ -2,30 +2,37 @@ import { join } from 'node:path';
|
|
|
2
2
|
import { stat, readdir } from 'node:fs/promises';
|
|
3
3
|
import { FsEntry } from '../models/index.js';
|
|
4
4
|
import { iterateInSeries } from '../utils/iteration/index.js';
|
|
5
|
+
const STAT_CONCURRENCY = 64;
|
|
5
6
|
const traverseDirectoryRecursive = async (absoluteDirPath, relativeDirPath, onEachChild) => {
|
|
6
|
-
const entries = await readdir(absoluteDirPath);
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
name
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
isFile
|
|
18
|
-
|
|
7
|
+
const entries = await readdir(absoluteDirPath, { withFileTypes: true });
|
|
8
|
+
for (let batchStart = 0; batchStart < entries.length; batchStart += STAT_CONCURRENCY) {
|
|
9
|
+
const batchEntries = entries.slice(batchStart, batchStart + STAT_CONCURRENCY);
|
|
10
|
+
const batchStats = await Promise.all(batchEntries.map((entry) => {
|
|
11
|
+
return entry.isDirectory() ? null : stat(join(absoluteDirPath, entry.name));
|
|
12
|
+
}));
|
|
13
|
+
await iterateInSeries(batchEntries, async ({ name }, index) => {
|
|
14
|
+
const absolutePath = join(absoluteDirPath, name);
|
|
15
|
+
const relativePath = relativeDirPath ? join(relativeDirPath, name) : name;
|
|
16
|
+
const stats = batchStats[index];
|
|
17
|
+
const isFile = stats !== null && stats.isFile();
|
|
18
|
+
const size = isFile ? stats.size : 0;
|
|
19
|
+
const fsEntry = new FsEntry({
|
|
20
|
+
name,
|
|
21
|
+
absolutePath,
|
|
22
|
+
relativePath,
|
|
23
|
+
isFile,
|
|
24
|
+
size,
|
|
25
|
+
});
|
|
26
|
+
let iterateEntry = fsEntry.isDirectory;
|
|
27
|
+
const skipEntryChildrenIteration = () => {
|
|
28
|
+
iterateEntry = false;
|
|
29
|
+
};
|
|
30
|
+
await onEachChild(fsEntry, { skipEntryChildrenIteration });
|
|
31
|
+
if (iterateEntry) {
|
|
32
|
+
await traverseDirectoryRecursive(absolutePath, relativePath, onEachChild);
|
|
33
|
+
}
|
|
19
34
|
});
|
|
20
|
-
|
|
21
|
-
const skipEntryChildrenIteration = () => {
|
|
22
|
-
iterateEntry = false;
|
|
23
|
-
};
|
|
24
|
-
await onEachChild(fsEntry, { skipEntryChildrenIteration });
|
|
25
|
-
if (iterateEntry) {
|
|
26
|
-
await traverseDirectoryRecursive(absolutePath, relativePath, onEachChild);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
35
|
+
}
|
|
29
36
|
};
|
|
30
37
|
export default traverseDirectoryRecursive;
|
|
31
38
|
//# sourceMappingURL=traverseDirectoryRecursive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverseDirectoryRecursive.js","sourceRoot":"","sources":["../../src/traverseDirectory/traverseDirectoryRecursive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"traverseDirectoryRecursive.js","sourceRoot":"","sources":["../../src/traverseDirectory/traverseDirectoryRecursive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,MAAM,0BAA0B,GAAG,KAAK,EACtC,eAAuB,EACvB,eAA8B,EAC9B,WAAwB,EACT,EAAE;IACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAExE,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,gBAAgB,EAAE,CAAC;QACrF,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAAC,CAAC;QAE9E,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAa,EAAyB,EAAE;YACxD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,eAAe,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,EAAU,EAAE,KAAa,EAAE,EAAE;YAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1E,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAErC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;gBAC1B,IAAI;gBACJ,YAAY;gBACZ,YAAY;gBACZ,MAAM;gBACN,IAAI;aACL,CAAC,CAAC;YAEH,IAAI,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;YAEvC,MAAM,0BAA0B,GAAG,GAAG,EAAE;gBACtC,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC,CAAC;YAEF,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAE3D,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,0BAA0B,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const iterateInSeries: <T>(array: T[], callback: (element: T, index
|
|
1
|
+
declare const iterateInSeries: <T>(array: T[], callback: (element: T, index: number) => void | Promise<void>) => Promise<void>;
|
|
2
2
|
export default iterateInSeries;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateInSeries.js","sourceRoot":"","sources":["../../../src/utils/iteration/iterateInSeries.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,KAAK,EAC3B,KAAU,EACV,
|
|
1
|
+
{"version":3,"file":"iterateInSeries.js","sourceRoot":"","sources":["../../../src/utils/iteration/iterateInSeries.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,KAAK,EAC3B,KAAU,EACV,QAA6D,EAC9C,EAAE;IACjB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aminzer/traverse-directory",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.9",
|
|
4
4
|
"description": "Utility for directory child entries recursive iteration",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsc --project tsconfig.build.json",
|
|
33
33
|
"build:watch": "npm run build -- --watch",
|
|
34
|
-
"clean": "
|
|
34
|
+
"clean": "node -e \"fs.rmSync('dist',{recursive:true,force:true})\"",
|
|
35
35
|
"codestyle": "run-p lint typescript:check",
|
|
36
36
|
"lint": "eslint src/**/*.ts",
|
|
37
37
|
"lint:fix": "npm run lint -- --fix",
|
|
@@ -41,14 +41,13 @@
|
|
|
41
41
|
"typescript:check": "tsc --project tsconfig.json --noEmit"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@eslint/js": "^
|
|
45
|
-
"@types/node": "^
|
|
46
|
-
"eslint": "^
|
|
44
|
+
"@eslint/js": "^10.0.1",
|
|
45
|
+
"@types/node": "^26.4.1",
|
|
46
|
+
"eslint": "^10.10.0",
|
|
47
47
|
"eslint-config-prettier": "^10.1.8",
|
|
48
48
|
"eslint-plugin-prettier": "^5.5.4",
|
|
49
49
|
"npm-run-all": "^4.1.5",
|
|
50
50
|
"prettier": "^3.6.2",
|
|
51
|
-
"rimraf": "^6.0.1",
|
|
52
51
|
"tsx": "^4.20.6",
|
|
53
52
|
"typescript": "^5.9.2",
|
|
54
53
|
"typescript-eslint": "^8.44.1"
|