peter
Version:
Peter Test Framework
60 lines (51 loc) • 1.38 kB
JavaScript
/**
* @file src/utils/walk-directory.js
* @author Ryan Rossiter, ryan@kingsds.network
* @date July 2020
*
* This utility function will recursively find all files in the
* provided directory.
*/
;
const fs = require('fs');
const path = require('path');
/**
* @param {string} outerDir
* @returns {string[]}
*/
exports.walkDirectorySync = function walkDirectorySync(outerDir)
{
let seen = [];
function walk(dir)
{
var filenames = [];
for (let dent of fs.readdirSync(dir, { withFileTypes: true }))
{
let fullname = path.join(dir, dent.name);
let isDir = dent.isDirectory() || (dent.isSymbolicLink() && fs.statSync(fullname).isDirectory());
if (dent.isFIFO() || dent.isSocket() || dent.isCharacterDevice() || dent.isBlockDevice())
continue;
if (!isDir)
filenames.push(fullname);
else
{
try
{
let dirname = path.resolve(dir, dent.name);
if (seen.indexOf(dirname) === -1) /* handle cycles */
{
seen.push(dirname);
for (let filename of walk(dirname))
filenames.push(filename);
}
}
catch(e)
{
console.error(e.message);
}
}
}
return filenames;
}
return walk(path.resolve(process.cwd(), outerDir));
}