persona-community-5/.pnpm-store/v3/files/c4/3c184281ce8ddf33c56164c3dcd42f2e74deb71b50769722616e330245a649e4f0df7e96087092fc085a6dc85d20a1d34d09dda377b5d17e9e0229711e122f
rdev-worker a1d0d1bf1c
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
build: /implement-feature community-ui --requirements 'Build the React commu...
2026-02-24 08:22:30 +00:00

71 lines
2.1 KiB
Plaintext

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);
}
}
},
},
};
};