// 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}`) }) } }