auto-cr-cmd
Version:
Fast automated code review CLI powered by SWC-based static analysis
75 lines (74 loc) • 3.02 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadCustomRules = loadCustomRules;
var fs_1 = __importDefault(require("fs"));
var path_1 = __importDefault(require("path"));
var consola_1 = require("consola");
var file_1 = require("../utils/file");
var i18n_1 = require("../i18n");
var auto_cr_rules_1 = require("auto-cr-rules");
var SUPPORTED_EXTENSIONS = ['.js', '.cjs', '.mjs'];
function loadCustomRules(ruleDir) {
var t = (0, i18n_1.getTranslator)();
if (!ruleDir) {
return [];
}
var absolutePath = path_1.default.isAbsolute(ruleDir)
? ruleDir
: path_1.default.resolve(process.cwd(), ruleDir);
if (!fs_1.default.existsSync(absolutePath)) {
consola_1.consola.warn(t.customRuleDirMissing({ path: absolutePath }));
return [];
}
var ruleFiles = (0, file_1.getAllFiles)(absolutePath, [], SUPPORTED_EXTENSIONS);
var loaded = [];
for (var _i = 0, ruleFiles_1 = ruleFiles; _i < ruleFiles_1.length; _i++) {
var file = ruleFiles_1[_i];
try {
// eslint-disable-next-line @typescript-eslint/no-require-imports
var moduleExports = require(file);
var rules = extractRules(moduleExports, file);
if (!rules.length) {
consola_1.consola.warn(t.customRuleNoExport({ file: file }));
continue;
}
loaded.push.apply(loaded, rules);
}
catch (error) {
consola_1.consola.warn(t.customRuleLoadFailed({ file: file }), error instanceof Error ? error.message : error);
}
}
return loaded;
}
function extractRules(moduleExports, origin) {
var collected = [];
collected.push.apply(collected, normalizeCandidate(moduleExports, origin));
if (moduleExports && typeof moduleExports === 'object') {
var withDefault = moduleExports;
if (withDefault.default !== undefined) {
collected.push.apply(collected, normalizeCandidate(withDefault.default, "".concat(origin, ":default")));
}
if (withDefault.rules !== undefined) {
collected.push.apply(collected, normalizeCandidate(withDefault.rules, "".concat(origin, ":rules")));
}
if (withDefault.rule !== undefined) {
collected.push.apply(collected, normalizeCandidate(withDefault.rule, "".concat(origin, ":rule")));
}
}
return collected;
}
function normalizeCandidate(candidate, origin) {
if (!candidate) {
return [];
}
if (Array.isArray(candidate)) {
return candidate
.map(function (item, index) { return (0, auto_cr_rules_1.toRule)(item, "".concat(origin, "#").concat(index)); })
.filter(function (rule) { return rule !== null; });
}
var rule = (0, auto_cr_rules_1.toRule)(candidate, origin);
return rule ? [rule] : [];
}