Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 6x 6x 6x 5x 5x 5x 5x 5x 5x 5x 5x 4x 4x 5x 6x | 'use strict';
import * as fs from 'fs';
import * as path from 'path';
import {ItemStat} from '@owservable/folders';
const executeOnFilesRecursively = (folder: string, execute: Function): void => {
const children: string[] = fs.readdirSync(folder);
// PERFORMANCE: Single lstat call per item instead of two
const itemStats: ItemStat[] = children.map((name: string): ItemStat => {
const fullPath: string = path.join(folder, name);
const stat: fs.Stats = fs.lstatSync(fullPath);
return {
name,
fullPath,
isDirectory: stat.isDirectory()
};
});
// Separate files and folders using cached stat results
const files: ItemStat[] = itemStats.filter((item: ItemStat): boolean => !item.isDirectory);
const folders: ItemStat[] = itemStats.filter((item: ItemStat): boolean => item.isDirectory);
// Process files using native forEach
files.forEach((file: ItemStat): void => {
const obj: any = require(file.fullPath).default;
execute(obj);
});
// Process subfolders recursively using native forEach
folders.forEach((subFolder: ItemStat): void => executeOnFilesRecursively(subFolder.fullPath, execute));
};
export default executeOnFilesRecursively;
|