UNPKG

@redocly/respect-core

Version:
81 lines 3.7 kB
import { CHECKS } from '../../checks/index.js'; import { evaluateRuntimeExpression } from '../../runtime-expressions/index.js'; import { createRuntimeExpressionCtx } from '../context/index.js'; import { evaluateJSONPathCondition } from './evaluate-jsonpath-condition.js'; import { validateSuccessCriteria, isRegexpSuccessCriteria, isJSONPathSuccessCriteria, } from './validate-success-criteria.js'; export function checkCriteria({ workflowId, step, criteria: criteriaList = [], ctx, }) { validateSuccessCriteria(criteriaList); const checks = []; if (!workflowId) { checks.push({ name: CHECKS.SUCCESS_CRITERIA_CHECK, passed: false, message: `Undefined workflowId for step ${step.stepId}`, severity: ctx.severity['SUCCESS_CRITERIA_CHECK'], }); return checks; } const criteriaContext = createRuntimeExpressionCtx({ ctx, workflowId, step, }); criteriaList.forEach((criteria) => { const { condition } = criteria; try { if (isRegexpSuccessCriteria(criteria)) { const regexParts = condition.match(/^\/(.*)\/([gimsuy]*)$/); let regexPattern; let flags; if (regexParts) { regexPattern = regexParts[1]; // Extract pattern between the first and last slash flags = regexParts[2]; // Extract flags after the last slash } else { regexPattern = condition; // If no slashes are present, treat the whole string as the pattern flags = ''; // No flags in this case } const { context } = criteria; const regex = new RegExp(regexPattern, flags); checks.push({ name: CHECKS.SUCCESS_CRITERIA_CHECK, passed: regex.test(evaluateRuntimeExpression(context, criteriaContext, ctx.options.logger)), message: `Checking regex criteria: ${JSON.stringify(criteria)}`, severity: ctx.severity['SUCCESS_CRITERIA_CHECK'], condition: condition, }); } else if (isJSONPathSuccessCriteria(criteria)) { const { context } = criteria; const data = evaluateRuntimeExpression(context, criteriaContext, ctx.options.logger); checks.push({ name: CHECKS.SUCCESS_CRITERIA_CHECK, passed: evaluateJSONPathCondition(condition, data), message: `Checking jsonpath criteria: ${condition}`, severity: ctx.severity['SUCCESS_CRITERIA_CHECK'], condition: condition, }); } else { checks.push({ name: CHECKS.SUCCESS_CRITERIA_CHECK, passed: evaluateRuntimeExpression(condition, criteriaContext, ctx.options.logger), message: `Checking simple criteria: ${JSON.stringify(criteria)}`, severity: ctx.severity['SUCCESS_CRITERIA_CHECK'], condition: condition, }); } } catch (e) { checks.push({ name: CHECKS.SUCCESS_CRITERIA_CHECK, passed: false, message: `Failed to pass ${JSON.stringify(criteria)}: ${e.message}`, severity: ctx.severity['SUCCESS_CRITERIA_CHECK'], condition: criteria.condition, }); } }); return checks; } //# sourceMappingURL=check-success-criteria.js.map