oex2003/evolution-api
0
1function normalizeString(str: string): string {2 return str3 .normalize('NFD')4 .replace(/[\u0300-\u036f]/g, '')5 .toLowerCase();6}7 8export function advancedOperatorsSearch(data: string, query: string): boolean {9 const filters = query.split(' ').reduce((acc: Record<string, string[]>, filter) => {10 const [operator, ...values] = filter.split(':');11 const value = values.join(':');12 13 if (!acc[operator]) {14 acc[operator] = [];15 }16 acc[operator].push(value);17 return acc;18 }, {});19 20 const normalizedItem = normalizeString(data);21 22 return Object.entries(filters).every(([operator, values]) => {23 return values.some((val) => {24 const subValues = val.split(',');25 return subValues.every((subVal) => {26 const normalizedSubVal = normalizeString(subVal);27 28 switch (operator.toLowerCase()) {29 case 'contains':30 return normalizedItem.includes(normalizedSubVal);31 case 'notcontains':32 return !normalizedItem.includes(normalizedSubVal);33 case 'startswith':34 return normalizedItem.startsWith(normalizedSubVal);35 case 'endswith':36 return normalizedItem.endsWith(normalizedSubVal);37 case 'exact':38 return normalizedItem === normalizedSubVal;39 default:40 return false;41 }42 });43 });44 });45}46 