/** my personalized require.context
* did it, cause got require.context is not a function,
* even using @types/webpack-env
* Thamara Silva Alves
* 25.02.2020
*/
if (typeof require.context === 'undefined') {
const fs = require('fs');
const path = require('path');
// path: string, deep?: boolean, filter?: RegExp, mode?: "sync" | "eager" | "weak" | "lazy" | "lazy-once")
require.context = (base = '.', scanSubDirectories = true, regularExpression = /\.ts$/, resolve = 'sync') => {
const files = {};
function readDirectory(directory) {
fs.readdirSync(directory).forEach((file) => {
const fullPath = path.resolve(directory, file);
if (fs.statSync(fullPath).isDirectory()) {
if (scanSubDirectories) readDirectory(fullPath);
return;
}
if (!regularExpression.test(fullPath)) return;
files[fullPath] = true;
});
}
readDirectory(path.resolve(__dirname, base));
function Module(file) {
return require(file);
}
Module.keys = () => Object.keys(files);
Module.resolve = (id: String) => ''; // gonna improve it
Module.id = ''; // gonna improve it
return Module;
};
}
const requireModule = require.context('.', true, /\.ts$/)
requireModule.keys().forEach(fileName => {
const path = fileName.replace(/(\.\/|\.ts)/g, '')
const splited = path.split(/\.\/|\\/g)
const moduleName = splited[splited.length-1]
const folderName = splited[splited.length-2]
const notAllowed = ['buildModel', 'index']
let exportedModules = (!notAllowed.includes(moduleName)) ? require(`./${folderName}/${moduleName}`) : ''
for (let elem in exportedModules) {
module.exports[elem] = exportedModules[elem]
}
})