[d565449] | 1 | /**
|
---|
| 2 | * @fileoverview Module for loading rules from files and directories.
|
---|
| 3 | * @author Michael Ficarra
|
---|
| 4 | */
|
---|
| 5 |
|
---|
| 6 | "use strict";
|
---|
| 7 |
|
---|
| 8 | //------------------------------------------------------------------------------
|
---|
| 9 | // Requirements
|
---|
| 10 | //------------------------------------------------------------------------------
|
---|
| 11 |
|
---|
| 12 | const fs = require("fs"),
|
---|
| 13 | path = require("path");
|
---|
| 14 |
|
---|
| 15 | const rulesDirCache = {};
|
---|
| 16 |
|
---|
| 17 | //------------------------------------------------------------------------------
|
---|
| 18 | // Public Interface
|
---|
| 19 | //------------------------------------------------------------------------------
|
---|
| 20 |
|
---|
| 21 | /**
|
---|
| 22 | * Load all rule modules from specified directory.
|
---|
| 23 | * @param {string} relativeRulesDir Path to rules directory, may be relative.
|
---|
| 24 | * @param {string} cwd Current working directory
|
---|
| 25 | * @returns {Object} Loaded rule modules.
|
---|
| 26 | */
|
---|
| 27 | module.exports = function(relativeRulesDir, cwd) {
|
---|
| 28 | const rulesDir = path.resolve(cwd, relativeRulesDir);
|
---|
| 29 |
|
---|
| 30 | // cache will help performance as IO operation are expensive
|
---|
| 31 | if (rulesDirCache[rulesDir]) {
|
---|
| 32 | return rulesDirCache[rulesDir];
|
---|
| 33 | }
|
---|
| 34 |
|
---|
| 35 | const rules = Object.create(null);
|
---|
| 36 |
|
---|
| 37 | fs.readdirSync(rulesDir).forEach(file => {
|
---|
| 38 | if (path.extname(file) !== ".js") {
|
---|
| 39 | return;
|
---|
| 40 | }
|
---|
| 41 | rules[file.slice(0, -3)] = require(path.join(rulesDir, file));
|
---|
| 42 | });
|
---|
| 43 | rulesDirCache[rulesDir] = rules;
|
---|
| 44 |
|
---|
| 45 | return rules;
|
---|
| 46 | };
|
---|