auto-cr-cmd
Version:
Fast automated code review CLI powered by SWC-based static analysis
116 lines (115 loc) • 4.39 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadIgnoreConfig = loadIgnoreConfig;
exports.createIgnoreMatcher = createIgnoreMatcher;
var fs_1 = __importDefault(require("fs"));
var path_1 = __importDefault(require("path"));
var picomatch_1 = __importDefault(require("picomatch"));
var i18n_1 = require("../i18n");
var IGNORE_CANDIDATES = ['.autocrignore.json', '.autocrignore.js'];
function loadIgnoreConfig(configPath) {
var warnings = [];
var t = (0, i18n_1.getTranslator)();
var resolvedPath = resolveConfigPath(configPath);
if (!resolvedPath) {
return { patterns: [], warnings: warnings, baseDir: process.cwd() };
}
if (!fs_1.default.existsSync(resolvedPath)) {
warnings.push(t.autocrignorePathMissing({ path: resolvedPath }));
return { patterns: [], warnings: warnings, baseDir: process.cwd() };
}
var baseDir = path_1.default.dirname(resolvedPath);
try {
var raw = readIgnoreFile(resolvedPath);
var patterns = normalizeIgnorePayload(raw);
if (!patterns.length) {
warnings.push(t.autocrignoreInvalidFormat({ path: resolvedPath }));
}
return { path: resolvedPath, patterns: patterns, warnings: warnings, baseDir: baseDir };
}
catch (error) {
var detail = error instanceof Error ? error.message : String(error);
warnings.push(t.autocrignoreLoadFailed({ path: resolvedPath, error: detail }));
return { patterns: [], warnings: warnings, baseDir: baseDir };
}
}
function createIgnoreMatcher(patterns, baseDir) {
if (baseDir === void 0) { baseDir = process.cwd(); }
if (!patterns.length) {
return function () { return false; };
}
var cwd = baseDir;
var matchers = patterns
.map(function (pattern) { return (0, picomatch_1.default)(pattern, { dot: true, nocase: false, posix: true }); })
.filter(function (matcher) { return matcher !== null; });
return function (candidate) {
var normalized = toPosix(candidate);
var relative = toPosix(path_1.default.relative(cwd, candidate));
return matchers.some(function (matcher) { return matcher(normalized) || matcher(relative); });
};
}
function resolveConfigPath(explicitPath) {
if (explicitPath) {
return path_1.default.isAbsolute(explicitPath) ? explicitPath : path_1.default.resolve(process.cwd(), explicitPath);
}
for (var _i = 0, IGNORE_CANDIDATES_1 = IGNORE_CANDIDATES; _i < IGNORE_CANDIDATES_1.length; _i++) {
var candidate = IGNORE_CANDIDATES_1[_i];
var resolved = path_1.default.resolve(process.cwd(), candidate);
if (fs_1.default.existsSync(resolved)) {
return resolved;
}
}
return null;
}
function readIgnoreFile(filePath) {
if (filePath.endsWith('.json')) {
var raw = fs_1.default.readFileSync(filePath, 'utf-8');
return JSON.parse(raw);
}
if (filePath.endsWith('.js')) {
// eslint-disable-next-line @typescript-eslint/no-require-imports
return require(filePath);
}
return [];
}
function normalizeIgnorePayload(payload) {
var values = [];
if (Array.isArray(payload)) {
for (var _i = 0, payload_1 = payload; _i < payload_1.length; _i++) {
var entry = payload_1[_i];
var normalized = normalizeEntry(entry);
if (normalized)
values.push(normalized);
}
return values;
}
if (isRecord(payload) && payload.ignore) {
return normalizeIgnorePayload(payload.ignore);
}
if (isRecord(payload) && payload.default) {
return normalizeIgnorePayload(payload.default);
}
if (typeof payload === 'string') {
return normalizeIgnorePayload(payload.split(/\r?\n/));
}
return values;
}
function normalizeEntry(entry) {
if (typeof entry !== 'string') {
return null;
}
var trimmed = entry.trim();
if (!trimmed || trimmed.startsWith('#')) {
return null;
}
return trimmed;
}
function isRecord(value) {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}
function toPosix(p) {
return p.split(path_1.default.sep).join('/');
}