(
expression: string,
{ fieldMap, fieldPermissionMap }: { fieldMap: IFieldMap; fieldPermissionMap?: IFieldPermissionMap },
to: 'id' | 'name',
)
| 210 | |
| 211 | // Convert an expression with fieldName as variable name to an expression with fieldId as variable name |
| 212 | export function expressionTransform( |
| 213 | expression: string, |
| 214 | { fieldMap, fieldPermissionMap }: { fieldMap: IFieldMap; fieldPermissionMap?: IFieldPermissionMap }, |
| 215 | to: 'id' | 'name', |
| 216 | ): string { |
| 217 | if (!expression) { |
| 218 | return expression; |
| 219 | } |
| 220 | |
| 221 | const lexer = new FormulaExprLexer(expression); |
| 222 | if (!lexer) { |
| 223 | return ''; |
| 224 | } |
| 225 | |
| 226 | // Convert fieldMap and use name as key |
| 227 | let revertFieldMap = fieldMap; |
| 228 | if (to === 'id') { |
| 229 | revertFieldMap = {}; |
| 230 | for (const key in fieldMap) { |
| 231 | const field = fieldMap[key]!; |
| 232 | revertFieldMap[field.name] = field; |
| 233 | } |
| 234 | } |
| 235 | |
| 236 | return lexer.fullMatches.reduce<string>((str, token) => { |
| 237 | let tokenValue = token.value; |
| 238 | |
| 239 | function getPureTokenValue() { |
| 240 | const pureTokenValue = token.value.replace(/\\(.)/g, '$1'); |
| 241 | const field = revertFieldMap[pureTokenValue]; |
| 242 | // Convert the variable name according to the to parameter |
| 243 | if (!field) { |
| 244 | return tokenValue; |
| 245 | } |
| 246 | if (to === 'id') { |
| 247 | return field.id; |
| 248 | } |
| 249 | |
| 250 | const name = field.name.replace(/[{}\\]/g, '\\$&'); |
| 251 | // When name contains illegal parameters, {} wrapping is required |
| 252 | if (/[/+\-|=*/><()()!&%'"“”‘’^`~,,\s]/.test(name)) { |
| 253 | return `{${name}}`; |
| 254 | } |
| 255 | console.log( |
| 256 | t(Strings.not_found_field_the_name_as, { |
| 257 | value: pureTokenValue, |
| 258 | }), |
| 259 | ); |
| 260 | return name; |
| 261 | } |
| 262 | |
| 263 | function getTokenValue() { |
| 264 | const pureTokenValue = tokenValue.slice(1, -1).replace(/\\(.)/g, '$1'); |
| 265 | const field = revertFieldMap[pureTokenValue]; |
| 266 | const fieldRole = getFieldRoleByFieldId(fieldPermissionMap, pureTokenValue); |
| 267 | |
| 268 | if (fieldRole === ConfigConstant.Role.None) { |
| 269 | return `{${t(Strings.crypto_field)}}`; |
no test coverage detected