UNPKG

@redocly/openapi-core

Version:

See https://github.com/Redocly/redocly-cli

71 lines (66 loc) 2.11 kB
import type { Arazzo1Rule } from '../../visitors'; import type { UserContext } from '../../walk'; export const CriteriaUnique: Arazzo1Rule = () => { return { FailureActionObject: { enter(action, { report, location }: UserContext) { const criterias = action?.criteria; if (!Array.isArray(criterias)) { return; } const seen = new Set<string>(); for (const criteria of criterias) { const key = JSON.stringify(criteria); if (seen.has(key)) { report({ message: 'The FailureAction criteria items must be unique.', location: location.child(['criteria', criterias.indexOf(criteria)]), }); } else { seen.add(key); } } }, }, SuccessActionObject: { enter(action, { report, location }: UserContext) { const criterias = action?.criteria; if (!Array.isArray(criterias)) { return; } const seen = new Set<string>(); for (const criteria of criterias) { const key = JSON.stringify(criteria); if (seen.has(key)) { report({ message: 'The SuccessAction criteria items must be unique.', location: location.child(['criteria', criterias.indexOf(criteria)]), }); } else { seen.add(key); } } }, }, Step: { enter(step, { report, location }: UserContext) { const successCriterias = step?.successCriteria; if (!Array.isArray(successCriterias)) { return; } const seen = new Set<string>(); for (const criteria of successCriterias) { const key = JSON.stringify(criteria); if (seen.has(key)) { report({ message: 'The Step SuccessCriteria items must be unique.', location: location.child(['successCriteria', successCriterias.indexOf(criteria)]), }); } else { seen.add(key); } } }, }, }; };