@apistudio/apim-cli
Version:
CLI for API Management Products
42 lines (41 loc) • 2.29 kB
JavaScript
/**
* 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) => {
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;
};