UNPKG

@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
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;