Advanced operators trigger fro OpenAI/Dify/Typebot

This commit is contained in:
Judson Cairo
2024-08-17 08:32:05 -03:00
parent a77fa414e5
commit fcd038924d
10 changed files with 205 additions and 12 deletions

View File

@@ -0,0 +1,45 @@
function normalizeString(str: string): string {
return str
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '')
.toLowerCase();
}
export function advancedOperatorsSearch(data: string, query: string): boolean {
const filters = query.split(' ').reduce((acc: Record<string, string[]>, filter) => {
const [operator, ...values] = filter.split(':');
const value = values.join(':');
if (!acc[operator]) {
acc[operator] = [];
}
acc[operator].push(value);
return acc;
}, {});
const normalizedItem = normalizeString(data);
return Object.entries(filters).every(([operator, values]) => {
return values.some((val) => {
const subValues = val.split(',');
return subValues.every((subVal) => {
const normalizedSubVal = normalizeString(subVal);
switch (operator.toLowerCase()) {
case 'contains':
return normalizedItem.includes(normalizedSubVal);
case 'notcontains':
return !normalizedItem.includes(normalizedSubVal);
case 'startswith':
return normalizedItem.startsWith(normalizedSubVal);
case 'endswith':
return normalizedItem.endsWith(normalizedSubVal);
case 'exact':
return normalizedItem === normalizedSubVal;
default:
return false;
}
});
});
});
}