UNPKG

archunit

Version:

ArchUnit TypeScript is an architecture testing library, to specify and assert architecture rules in your TypeScript app

105 lines 3.97 kB
"use strict"; 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