UNPKG

esm-require-directory

Version:

require a directory of modules using es6 modules require

49 lines (48 loc) 1.88 kB
import Iterator from 'fs-iterator'; import path from 'path'; import addResult from './addResult.js'; import requireIndex from './requireIndex.js'; export default function walk(directory, options, callback) { const results = options.paths || options.filename ? {} : []; let iterator = new Iterator(directory, { depth: options.recursive ? Infinity : 0, alwaysStat: true, filter: (entry, callback)=>{ if (entry.path === '') return callback(); // check for index file one level under the directory if (entry.stats.isDirectory()) { if (options.recursive) { callback(); // will pick up index in traverse return; } const cb = (error, module, indexBasename)=>{ if (error) return callback(error); if (module) addResult(results, { basename: indexBasename, path: path.join(entry.path, indexBasename) }, options, module); callback(); }; requireIndex(entry.fullPath, options, cb); } else { if (!~options.extensions.indexOf(path.extname(entry.basename))) { callback(); // not a supported index return; } options.loader(entry.fullPath, (err, module)=>{ if (err) return callback(err); if (module) addResult(results, entry, options, module); callback(); }); } }, callbacks: true }); iterator.forEach((_entry)=>{}, { concurrency: 1 }, (err)=>{ iterator.destroy(); iterator = null; err ? callback(err) : callback(null, results); }); }