@apistudio/apim-cli
Version:
CLI for API Management Products
78 lines (64 loc) • 2.37 kB
text/typescript
/**
* Copyright IBM Corp. 2024, 2025
*/
/**
* Converts human-readable condition format to filtrex-compatible format
*
* @param humanReadable - The human-readable condition string
* @returns The filtrex-compatible condition string
*
* @example
* Input: "${requestHeaders.abc} equals 100 and ${response.name} contains ["victor", "sangeeth"]"
* Output: "${requestHeaders.abc} == 100 and ${response.name} in ("victor", "sangeeth")"
*
* @example
* Input: "${requestHeaders} containsKey Content-Type and ${response} equals sss"
* Output: "Content-Type of ${requestHeaders} and ${response} == sss"
*/
export const convertToExecutableFormat = (humanReadable: string): string => {
if (!humanReadable) return '';
let executable = humanReadable;
executable = executable.replace(/ AND /gi, ' and ');
executable = executable.replace(/ OR /gi, ' or ');
executable = executable.replace(/\bNOT\b/gi, 'not');
executable = executable.replace(
/\$\{([^}]+)\}\s+equalsIgnoreCase\s+([^\s\)]+)/gi,
'${$1}_lowercase == $2_lowercase',
);
executable = executable.replace(
/\$\{([^}]+)\}\s+notEqualsIgnoreCase\s+([^\s\)]+)/gi,
'${$1}_lowercase != $2_lowercase',
);
executable = executable.replace(
/\$\{([^}]+)\}\s+contains\s+\[([^\]]+)\]/gi,
'${$1} in ($2)',
);
executable = executable.replace(
/\$\{([^}]+)\}\s+notContains\s+\[([^\]]+)\]/gi,
'${$1} not in ($2)',
);
executable = executable.replace(
/\$\{([^}]+)\}\s+exists\b/gi,
'exists(${$1})',
);
executable = executable.replace(
/\$\{([^}]+)\}\s+notExists\b/gi,
'not exists(${$1})',
);
executable = executable.replace(/\$\{([^}]+)\}\s+empty\b/gi, 'empty(${$1})');
executable = executable.replace(
/\$\{([^}]+)\}\s+range\s+\[([^,]+),\s*([^\]]+)\]/gi,
'(${$1} >= $2 and ${$1} <= $3)',
);
executable = executable.replace(
/\$\{([^}]+)\}\s+containsKey\s+([^\s\)]+)/gi,
'$2 of ${$1}',
);
executable = executable.replace(/\s+greaterThanOrEqual\s+/gi, ' >= ');
executable = executable.replace(/\s+lessThanOrEqual\s+/gi, ' <= ');
executable = executable.replace(/\s+notEquals\s+/gi, ' != ');
executable = executable.replace(/\s+equals\s+/gi, ' == ');
executable = executable.replace(/\s+greaterThan\s+/gi, ' > ');
executable = executable.replace(/\s+lessThan\s+/gi, ' < ');
return executable;
};