(expr: Expr)
| 382 | }; |
| 383 | |
| 384 | export const convertFromExpr = (expr: Expr): ConditionExpression => { |
| 385 | const simpleExpr = resolveCELExpr(expr); |
| 386 | const conditionExpression: ConditionExpression = { |
| 387 | databaseResources: [], |
| 388 | }; |
| 389 | |
| 390 | function processCondition(expr: SimpleExpr) { |
| 391 | // Do not process raw string expression. |
| 392 | if (isRawStringExpr(expr)) { |
| 393 | return; |
| 394 | } |
| 395 | |
| 396 | if (expr.operator === "_&&_" || expr.operator === "_||_") { |
| 397 | for (const arg of expr.args) { |
| 398 | processCondition(arg); |
| 399 | } |
| 400 | } else if (expr.operator === "@in") { |
| 401 | const [property, values] = expr.args; |
| 402 | if (typeof property === "string" && Array.isArray(values)) { |
| 403 | switch (property) { |
| 404 | case CEL_ATTRIBUTE_RESOURCE_ENVIRONMENT_ID: { |
| 405 | if (conditionExpression.environments === undefined) { |
| 406 | conditionExpression.environments = []; |
| 407 | } |
| 408 | for (const value of values) { |
| 409 | conditionExpression.environments?.push( |
| 410 | `${environmentNamePrefix}${value as string}` |
| 411 | ); |
| 412 | } |
| 413 | break; |
| 414 | } |
| 415 | case CEL_ATTRIBUTE_RESOURCE_DATABASE: { |
| 416 | for (const value of values) { |
| 417 | const databaseResource: DatabaseResource = { |
| 418 | databaseFullName: value as string, |
| 419 | }; |
| 420 | conditionExpression.databaseResources!.push(databaseResource); |
| 421 | } |
| 422 | break; |
| 423 | } |
| 424 | case CEL_ATTRIBUTE_RESOURCE_SCHEMA_NAME: { |
| 425 | const databaseResource = |
| 426 | conditionExpression.databaseResources?.pop(); |
| 427 | if (databaseResource) { |
| 428 | for (const value of values) { |
| 429 | const temp: DatabaseResource = cloneDeep(databaseResource); |
| 430 | temp.schema = value as string; |
| 431 | conditionExpression.databaseResources!.push(temp); |
| 432 | } |
| 433 | } |
| 434 | break; |
| 435 | } |
| 436 | case CEL_ATTRIBUTE_RESOURCE_TABLE_NAME: { |
| 437 | const databaseResource = |
| 438 | conditionExpression.databaseResources?.pop(); |
| 439 | if (databaseResource) { |
| 440 | for (const value of values) { |
| 441 | const temp: DatabaseResource = cloneDeep(databaseResource); |
no test coverage detected