12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /**
- * @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. Defaults to `lib/rules`.
- * @param {string} cwd Current working directory
- * @returns {Object} Loaded rule modules by rule ids (file names).
- */
- module.exports = function(relativeRulesDir, cwd) {
-
- const rulesDir = relativeRulesDir
- ? path.resolve(cwd, relativeRulesDir)
- : path.join(__dirname, "rules");
-
- // 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)] = path.join(rulesDir, file);
- });
- rulesDirCache[rulesDir] = rules;
-
- return rules;
- };
|