UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

42 lines (41 loc) 2.29 kB
/** * 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; };