archunit
Version:
ArchUnit TypeScript is an architecture testing library, to specify and assert architecture rules in your TypeScript app
105 lines • 3.97 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.matchingAllPatterns_OLD = exports.matchesAnyPattern = exports.matchesAllPatterns = exports.matchesPatternClassInfo = exports.matchesPattern = exports.extractFilename = void 0;
const util_1 = require("./util");
/**
* Extract filename from a file path
*/
function extractFilename(filePath) {
const normalized = filePath.replace(/\\/g, '/');
const parts = normalized.split('/');
return parts[parts.length - 1];
}
exports.extractFilename = extractFilename;
function normalizePath(inp) {
return inp.replace(/\\/g, '/');
}
function pathWithoutFilename(inp) {
const normalized = inp.replace(/\\/g, '/');
const parts = normalized.split('/');
parts.pop();
return parts.join('/');
}
function matchesPattern(file, filter, options) {
const filePath = typeof file === 'string' ? file : file.label;
let targetString;
switch (filter.options.target) {
case 'filename':
targetString = extractFilename(filePath);
break;
case 'path':
targetString = normalizePath(filePath);
break;
case 'path-no-filename':
targetString = pathWithoutFilename(filePath);
break;
default:
targetString = normalizePath(filePath);
break;
}
const matches = filter.regExp.test(targetString);
util_1.sharedLogger.info(options?.logging, `Testing file: ${filePath}`);
util_1.sharedLogger.info(options?.logging, ` Target string (${filter.options.target}): "${targetString}"`);
util_1.sharedLogger.info(options?.logging, ` Pattern: ${filter.regExp.source}`);
util_1.sharedLogger.info(options?.logging, ` Matches: ${matches}`);
return matches;
}
exports.matchesPattern = matchesPattern;
function matchesPatternClassInfo(classInfo, filter, options) {
const filePath = classInfo.filePath;
let targetString;
switch (filter.options.target) {
case 'filename':
targetString = extractFilename(filePath);
break;
case 'path':
targetString = normalizePath(filePath);
break;
case 'path-no-filename':
targetString = pathWithoutFilename(filePath);
break;
case 'classname':
targetString = classInfo.name;
break;
default:
targetString = normalizePath(filePath);
break;
}
const matches = filter.regExp.test(targetString);
util_1.sharedLogger.info(options?.logging, `Testing class: ${classInfo.name} from ${filePath}`);
util_1.sharedLogger.info(options?.logging, ` Target string (${filter.options.target}): "${targetString}"`);
util_1.sharedLogger.info(options?.logging, ` Pattern: ${filter.regExp.source}`);
util_1.sharedLogger.info(options?.logging, ` Matches: ${matches}`);
return matches;
}
exports.matchesPatternClassInfo = matchesPatternClassInfo;
/**
* Enhanced pattern matching for multiple patterns (all must match)
*
* If a pattern is a string, glob logic is handled automatically. Do not handle glob logic yourself.
*/
function matchesAllPatterns(file, filters) {
return filters.every((filter) => matchesPattern(file, filter));
}
exports.matchesAllPatterns = matchesAllPatterns;
/**
* Enhanced pattern matching for multiple patterns (at least one must match)
*/
function matchesAnyPattern(file, filters) {
return filters.some((filter) => matchesPattern(file, filter));
}
exports.matchesAnyPattern = matchesAnyPattern;
/**
* OLD
*/
const matchingAllPatterns_OLD = (input, patterns) => {
return patterns.every((pattern) => {
if (typeof pattern === 'string') {
const regex = new RegExp(pattern);
return regex.test(input);
}
return pattern.test(input);
});
};
exports.matchingAllPatterns_OLD = matchingAllPatterns_OLD;
//# sourceMappingURL=pattern-matching.js.map
;