Files
react-native-devtools-frontend/node_modules/eslint-plugin-rulesdir/index.js
T
Jack Franklin 32c8d822f1 Update eslint-plugin-rulesdir to 0.2.0
DISABLE_THIRD_PARTY_CHECK=node_modules update

Bug: none
Change-Id: I0314c61235e97459facf879aec4bc8b9e1029099
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2753149
Commit-Queue: Jack Franklin <jacktfranklin@chromium.org>
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
Reviewed-by: Tim van der Lippe <tvanderlippe@chromium.org>
Auto-Submit: Jack Franklin <jacktfranklin@chromium.org>
2021-03-12 12:09:08 +00:00

47 lines
1.7 KiB
JavaScript

/**
* @fileoverview Allows a local ESLint rules directory to be used without a command-line flag
* @author Teddy Katz
*/
'use strict';
//------------------------------------------------------------------------------
// Requirements
//------------------------------------------------------------------------------
const fs = require('fs');
const path = require('path');
//------------------------------------------------------------------------------
// Plugin Definition
//------------------------------------------------------------------------------
const cache = {};
module.exports = {
get rules() {
const RULES_DIR = module.exports.RULES_DIR;
if (typeof module.exports.RULES_DIR !== 'string' && !Array.isArray(RULES_DIR)) {
throw new Error('To use eslint-plugin-rulesdir, you must load it beforehand and set the `RULES_DIR` property on the module to a string or an array of strings.');
}
const cacheKey = JSON.stringify(RULES_DIR);
if (!cache[cacheKey]) {
const rules = Array.isArray(RULES_DIR) ? RULES_DIR : [RULES_DIR];
const rulesObject = {};
rules.forEach((rulesDir) => {
fs.readdirSync(rulesDir)
.filter(filename => filename.endsWith('.js'))
.map(filename => path.resolve(rulesDir, filename))
.forEach((absolutePath) => {
const ruleName = path.basename(absolutePath, '.js');
if (rulesObject[ruleName]) {
throw new Error(`eslint-plugin-rulesdir found two rules with the same name: ${ruleName}`);
}
rulesObject[ruleName] = require(absolutePath);
});
});
cache[cacheKey] = rulesObject;
}
return cache[cacheKey];
},
};