@mcabreradev/filter
Version:
A powerful, SQL-like array filtering library for TypeScript and JavaScript with advanced pattern matching, MongoDB-style operators, deep object comparison, and zero dependencies
22 lines (21 loc) • 992 B
JavaScript
import { WILDCARD_PERCENT, WILDCARD_UNDERSCORE, NEGATION_PREFIX } from '../../constants';
import { memoization } from '../memoization';
export const hasWildcard = (pattern) => pattern.includes(WILDCARD_PERCENT) || pattern.includes(WILDCARD_UNDERSCORE);
export const createWildcardRegex = (pattern, caseSensitive) => {
const escaped = pattern
.replace(/[.+^${}()|[\]\\*?]/g, '\\$&')
.replace(/%/g, '.*')
.replace(/_/g, '.');
const flags = caseSensitive ? '' : 'i';
return new RegExp(`^${escaped}$`, flags);
};
export const getCachedRegex = (pattern, flags) => {
const cached = memoization.getCachedRegex(pattern, flags);
if (cached)
return cached;
const regex = new RegExp(pattern, flags);
memoization.setCachedRegex(pattern, regex, flags);
return regex;
};
export const hasNegation = (pattern) => pattern.startsWith(NEGATION_PREFIX);
export const removeNegation = (pattern) => hasNegation(pattern) ? pattern.slice(1) : pattern;