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

63 lines (62 loc) 2.59 kB
import { hasWildcard, createWildcardRegex, hasNegation, removeNegation } from '../../utils'; export function createStringPredicate(expression, config) { if (hasNegation(expression)) { const cleanExpression = removeNegation(expression); return function (item) { if (item === null || item === undefined) { return false; } if (typeof item === 'string') { const itemLower = config.caseSensitive ? item : item.toLowerCase(); const exprLower = config.caseSensitive ? cleanExpression : cleanExpression.toLowerCase(); return itemLower !== exprLower; } const values = Object.values(item); return !values.some((value) => { if (typeof value === 'string') { const valueLower = config.caseSensitive ? value : value.toLowerCase(); const exprLower = config.caseSensitive ? cleanExpression : cleanExpression.toLowerCase(); return valueLower === exprLower; } return value === cleanExpression; }); }; } if (hasWildcard(expression)) { const regex = createWildcardRegex(expression, config.caseSensitive); return function (item) { if (item === null || item === undefined) { return false; } if (typeof item === 'string') { return regex.test(item); } for (const key in item) { const value = item[key]; if (typeof value === 'string' && regex.test(value)) { return true; } } return false; }; } return function (item) { if (item === null || item === undefined) { return false; } if (typeof item === 'string') { const itemLower = config.caseSensitive ? item : item.toLowerCase(); const exprLower = config.caseSensitive ? expression : expression.toLowerCase(); return itemLower === exprLower; } const values = Object.values(item); return values.some((value) => { if (typeof value === 'string') { const valueLower = config.caseSensitive ? value : value.toLowerCase(); const exprLower = config.caseSensitive ? expression : expression.toLowerCase(); return valueLower === exprLower; } return value === expression; }); }; }