bot-discord.js-template/node_modules/require-all/index.js

66 lines
1.6 KiB
JavaScript
Raw Normal View History

2022-04-10 19:39:54 +02:00
var fs = require('fs');
var DEFAULT_EXCLUDE_DIR = /^\./;
var DEFAULT_FILTER = /^([^\.].*)\.js(on)?$/;
var DEFAULT_RECURSIVE = true;
module.exports = function requireAll(options) {
var dirname = typeof options === 'string' ? options : options.dirname;
var excludeDirs = options.excludeDirs === undefined ? DEFAULT_EXCLUDE_DIR : options.excludeDirs;
var filter = options.filter === undefined ? DEFAULT_FILTER : options.filter;
var modules = {};
var recursive = options.recursive === undefined ? DEFAULT_RECURSIVE : options.recursive;
var resolve = options.resolve || identity;
var map = options.map || identity;
function excludeDirectory(dirname) {
return !recursive ||
(excludeDirs && dirname.match(excludeDirs));
}
function filterFile(filename) {
if (typeof filter === 'function') {
return filter(filename);
}
var match = filename.match(filter);
if (!match) return;
return match[1] || match[0];
}
var files = fs.readdirSync(dirname);
files.forEach(function (file) {
var filepath = dirname + '/' + file;
if (fs.statSync(filepath).isDirectory()) {
if (excludeDirectory(file)) return;
var subModules = requireAll({
dirname: filepath,
filter: filter,
excludeDirs: excludeDirs,
map: map,
resolve: resolve
});
if (Object.keys(subModules).length === 0) return;
modules[map(file, filepath)] = subModules;
} else {
var name = filterFile(file);
if (!name) return;
modules[map(name, filepath)] = resolve(require(filepath));
}
});
return modules;
};
function identity(val) {
return val;
}