filesys.js 1.67 KiB
// do file management
const fs = require('fs')
module.exports = {
// get a tree: takes the root (relative the process) and returns all branches below,
// includes route-to-root in list
getDirTree: (dir, debug) => {
let tld = dir
return new Promise((resolve, reject) => {
// items and count,
let list = []
let count = 0
// recursor,
let launch = (dir) => {
if (debug) console.log('GDT launch at', dir)
// just counting actually,
count++
fs.readdir(dir, (err, files) => {
if (err) {
reject(err)
}
count--
try {
for (file of files) {
if (file.includes('.')) {
let listAddition = `${dir.substring(__dirname.length + tld.length)}/${file}`
if (debug) console.log('GDT pushing', listAddition)
list.push(listAddition)
} else {
let launchPoint = `${dir}${file}`
if (debug) console.log('GDT launching', launchPoint)
launch(launchPoint)
}
}
} catch (err) {
// just walk on ...
console.log('walkover error:', err)
console.log('problem dir:', dir)
// and push up, give up on counting
list.sort()
resolve(list)
}
if (debug) console.log('GDT size', count)
if (!count) {
// we sort,
list.sort()
if(debug) console.log('list at fin getDirTree', list)
resolve(list)
}
}) // end fs.readdir
} // end launch
launch(`${__dirname}/${dir}`)
})
}
}