@aminzer/traverse-directory 1.2.7 → 1.2.8

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
- await iterateInSeries(entries, async (name) => {
8
- const absolutePath = join(absoluteDirPath, name);
9
- const relativePath = relativeDirPath ? join(relativeDirPath, name) : name;
10
- const stats = await stat(absolutePath);
11
- const isFile = stats.isFile();
12
- const size = isFile ? stats.size : 0;
13
- const fsEntry = new FsEntry({
14
- name,
15
- absolutePath,
16
- relativePath,
17
- isFile,
18
- size,
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
- let iterateEntry = fsEntry.isDirectory;
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;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,MAAM,0BAA0B,GAAG,KAAK,EACtC,eAAuB,EACvB,eAA8B,EAC9B,WAAwB,EACT,EAAE;IACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAE/C,MAAM,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;YAC1B,IAAI;YACJ,YAAY;YACZ,YAAY;YACZ,MAAM;YACN,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;QAEvC,MAAM,0BAA0B,GAAG,GAAG,EAAE;YACtC,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAE3D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,0BAA0B,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,0BAA0B,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?: number) => void | Promise<void>) => Promise<void>;
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,QAA8D,EAC/C,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"}
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.7",
3
+ "version": "1.2.8",
4
4
  "description": "Utility for directory child entries recursive iteration",
5
5
  "publishConfig": {
6
6
  "access": "public"