From 7b39fde186bbe7f931aa435b2703e56061d5fda1 Mon Sep 17 00:00:00 2001 From: Dmytro Anansky Date: Fri, 13 Sep 2024 13:21:34 +0300 Subject: [PATCH] fix: changes in criteria-unique arazzo rule (#1733) --- .changeset/hungry-drinks-grab.md | 6 ++++++ packages/core/src/config/config.ts | 2 +- packages/core/src/rules/arazzo/criteria-unique.ts | 15 +++++++++++---- 3 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 .changeset/hungry-drinks-grab.md diff --git a/.changeset/hungry-drinks-grab.md b/.changeset/hungry-drinks-grab.md new file mode 100644 index 00000000..405e0376 --- /dev/null +++ b/.changeset/hungry-drinks-grab.md @@ -0,0 +1,6 @@ +--- +"@redocly/openapi-core": patch +"@redocly/cli": patch +--- + +Added additional checks to `criteria-unique` Arazzo rule. diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index fecdaeaf..453c2d03 100755 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -74,7 +74,7 @@ export class StyleguideConfig { [SpecVersion.Async2]: { ...rawConfig.rules, ...rawConfig.async2Rules }, [SpecVersion.Async3]: { ...rawConfig.rules, ...rawConfig.async3Rules }, [SpecVersion.Arazzo]: { - ...rawConfig.arazzoRules, + ...(rawConfig.arazzoRules || {}), ...(rawConfig.rules?.assertions ? { assertions: rawConfig.rules.assertions } : {}), }, }; diff --git a/packages/core/src/rules/arazzo/criteria-unique.ts b/packages/core/src/rules/arazzo/criteria-unique.ts index d1947c06..82792296 100644 --- a/packages/core/src/rules/arazzo/criteria-unique.ts +++ b/packages/core/src/rules/arazzo/criteria-unique.ts @@ -5,7 +5,10 @@ export const CriteriaUnique: ArazzoRule = () => { return { FailureActionObject: { enter(action, { report, location }: UserContext) { - const criterias = action.criteria; + const criterias = action?.criteria; + if (!Array.isArray(criterias)) { + return; + } const seen = new Set(); for (const criteria of criterias) { const key = JSON.stringify(criteria); @@ -22,7 +25,10 @@ export const CriteriaUnique: ArazzoRule = () => { }, SuccessActionObject: { enter(action, { report, location }: UserContext) { - const criterias = action.criteria; + const criterias = action?.criteria; + if (!Array.isArray(criterias)) { + return; + } const seen = new Set(); for (const criteria of criterias) { const key = JSON.stringify(criteria); @@ -39,11 +45,12 @@ export const CriteriaUnique: ArazzoRule = () => { }, Step: { enter(step, { report, location }: UserContext) { - if (!step.successCriteria) { + const successCriterias = step?.successCriteria; + + if (!Array.isArray(successCriterias)) { return; } - const successCriterias = step.successCriteria; const seen = new Set(); for (const criteria of successCriterias) {