69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
import R from 'ramda'
|
|
|
|
// This is a mock of webpack's require.context, for testing purposes
|
|
if (typeof __webpack_require__ === 'undefined') {
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
require.context = (base = '.', scanSubDirectories = false, regularExpression = /\.js$/) => {
|
|
const yaml = require('js-yaml');
|
|
|
|
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 yaml.safeLoad(fs.readFileSync(file, 'utf8'));
|
|
}
|
|
|
|
Module.keys = () => Object.keys(files);
|
|
|
|
return Module;
|
|
};
|
|
}
|
|
|
|
// This array can't be generated, as the arguments to require.context must be literals :-|
|
|
let directoryLoaders =
|
|
[
|
|
require.context('../../règles/rémunération-travail/cdd',
|
|
true, /.yaml$/),
|
|
require.context('../../règles/rémunération-travail/entités/ok',
|
|
true, /.yaml$/),
|
|
require.context('../../règles/rémunération-travail/cotisations/ok',
|
|
true, /.yaml$/),
|
|
require.context('../../règles/rémunération-travail/aides/ok',
|
|
true, /.yaml$/),
|
|
]
|
|
|
|
// require.context returns an object which
|
|
// a) is a function behaving like 'requires', taking a filename and returning a module and
|
|
// b) has additional properties, some function-valued; keys() returns the files matched
|
|
// A "module" is simply the contents of a file according to a Webpack loader; this can be JS, JSON, etc.
|
|
// Thus, this weird loadAll returns an array, each item of which is the contents of each file in a directory
|
|
let loadAll = directoryLoaderFunction =>
|
|
directoryLoaderFunction.keys().map(directoryLoaderFunction)
|
|
|
|
let rules = R.pipe(
|
|
R.map(loadAll),
|
|
R.flatten,
|
|
R.reject(R.isNil)
|
|
)(directoryLoaders)
|
|
|
|
export default rules
|