/**
							 | 
						|
								 * @fileoverview Module for loading rules from files and directories.
							 | 
						|
								 * @author Michael Ficarra
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								"use strict";
							 | 
						|
								
							 | 
						|
								//------------------------------------------------------------------------------
							 | 
						|
								// Requirements
							 | 
						|
								//------------------------------------------------------------------------------
							 | 
						|
								
							 | 
						|
								const fs = require("fs"),
							 | 
						|
								    path = require("path");
							 | 
						|
								
							 | 
						|
								const rulesDirCache = {};
							 | 
						|
								
							 | 
						|
								//------------------------------------------------------------------------------
							 | 
						|
								// Public Interface
							 | 
						|
								//------------------------------------------------------------------------------
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Load all rule modules from specified directory.
							 | 
						|
								 * @param {string} relativeRulesDir Path to rules directory, may be relative.
							 | 
						|
								 * @param {string} cwd Current working directory
							 | 
						|
								 * @returns {Object} Loaded rule modules.
							 | 
						|
								 */
							 | 
						|
								module.exports = function(relativeRulesDir, cwd) {
							 | 
						|
								    const rulesDir = path.resolve(cwd, relativeRulesDir);
							 | 
						|
								
							 | 
						|
								    // cache will help performance as IO operation are expensive
							 | 
						|
								    if (rulesDirCache[rulesDir]) {
							 | 
						|
								        return rulesDirCache[rulesDir];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    const rules = Object.create(null);
							 | 
						|
								
							 | 
						|
								    fs.readdirSync(rulesDir).forEach(file => {
							 | 
						|
								        if (path.extname(file) !== ".js") {
							 | 
						|
								            return;
							 | 
						|
								        }
							 | 
						|
								        rules[file.slice(0, -3)] = require(path.join(rulesDir, file));
							 | 
						|
								    });
							 | 
						|
								    rulesDirCache[rulesDir] = rules;
							 | 
						|
								
							 | 
						|
								    return rules;
							 | 
						|
								};
							 |