@tdb/util
Version:
Shared helpers and utilities.
58 lines • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var escapeStringRegexp = require("escape-string-regexp");
var cache = new Map();
function matchesWildcard(inputs, patterns) {
if (patterns === undefined || patterns === null) {
return [];
}
if (!(Array.isArray(inputs) && Array.isArray(patterns))) {
throw new TypeError("Expected two arrays, got " + typeof inputs + " " + typeof patterns);
}
if (patterns.length === 0) {
return inputs;
}
var firstNegated = patterns[0][0] === '!';
var regExPatterns = patterns.map(function (x) { return makeRegEx(x, false); });
var result = [];
for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
var input = inputs_1[_i];
var matches = firstNegated;
for (var _a = 0, regExPatterns_1 = regExPatterns; _a < regExPatterns_1.length; _a++) {
var pattern = regExPatterns_1[_a];
if (pattern.test(input)) {
matches = !pattern.negated;
}
}
if (matches) {
result.push(input);
}
}
return result;
}
exports.matchesWildcard = matchesWildcard;
function isWildcardMatch(input, pattern) {
return pattern === undefined || pattern === null
? false
: makeRegEx(pattern, true).test(input);
}
exports.isWildcardMatch = isWildcardMatch;
function makeRegEx(pattern, shouldNegate) {
var cacheKey = pattern + shouldNegate;
if (cache.has(cacheKey)) {
return cache.get(cacheKey);
}
var negated = pattern[0] === '!';
if (negated) {
pattern = pattern.slice(1);
}
pattern = escapeStringRegexp(pattern).replace(/\\\*/g, '.*');
if (negated && shouldNegate) {
pattern = "(?!" + pattern + ")";
}
var result = new RegExp("^" + pattern + "$", 'i');
result.negated = negated;
cache.set(cacheKey, result);
return result;
}
//# sourceMappingURL=str.wildcard.js.map