noda
Version:
NOde Developing Assistant
63 lines (53 loc) • 1.38 kB
JavaScript
;
const MODULE_REQUIRE = 1
/* built-in */
, fs = require('fs')
, path = require('path')
/* NPM */
/* in-package */
;
function depth_first(cwd, pathname, depth) {
if (!depth) depth = Number.POSITIVE_INFINITY;
let realPathname = null;
let p = path.join(cwd, pathname);
if (fs.existsSync(p)) {
realPathname = p
}
else if (--depth > 0) {
let names = fs.readdirSync(cwd);
for (let i = 0, p; !realPathname && i < names.length; i++) {
p = path.join(cwd, names[i]);
if (fs.statSync(p).isDirectory()) {
realPathname = depth_first(p, pathname, depth);
}
}
}
return realPathname;
}
function breadth_first(cwd, pathname, depth) {
if (!depth) depth = Number.POSITIVE_INFINITY;
let realPathname = null;
let dirnames = null, subdirnames = [ cwd ];
do {
dirnames = subdirnames;
subdirnames = [];
for (let i = 0; !realPathname && i < dirnames.length; i++) {
let dirname = dirnames[i];
let p = path.join(dirname, pathname);
if (fs.existsSync(p)) {
realPathname = p;
}
else {
let names = fs.readdirSync(dirname);
names.forEach(name => {
p = path.join(dirname, name);
if (fs.statSync(p).isDirectory()) {
subdirnames.push(p);
}
});
}
}
} while(--depth > 0 && !realPathname && subdirnames.length > 0)
return realPathname;
}
module.exports = { depth_first, breadth_first };