persona-community-5/.pnpm-store/v3/files/8c/0bb7327211854f6324a89afabac2cc8d4014eaeeaa9653ae7d98a2b66dc049a0b84438a706338acd0b9755bd52b3c20f2d2050c0f0cd18f29fcf50b9c38d53
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

55 lines
1.8 KiB
Plaintext

import { isRef } from '../../ref-utils';
import { getAdditionalPropertiesOption, validateExample } from '../utils';
import type { Oas3Rule } from '../../visitors';
import type { Location } from '../../ref-utils';
import type { Oas3Example } from '../../typings/openapi';
import type { UserContext } from '../../walk';
export const ValidContentExamples: Oas3Rule = (opts) => {
const allowAdditionalProperties = getAdditionalPropertiesOption(opts) ?? false;
return {
MediaType: {
leave(mediaType, ctx: UserContext) {
const { location, resolve } = ctx;
if (!mediaType.schema) return;
if (mediaType.example !== undefined) {
resolveAndValidateExample(mediaType.example, location.child('example'));
} else if (mediaType.examples) {
for (const exampleName of Object.keys(mediaType.examples)) {
resolveAndValidateExample(
mediaType.examples[exampleName],
location.child(['examples', exampleName, 'value']),
true
);
}
}
function resolveAndValidateExample(
example: Oas3Example | any,
location: Location,
isMultiple?: boolean
) {
if (isRef(example)) {
const resolved = resolve<Oas3Example>(example);
if (!resolved.location) return;
location = isMultiple ? resolved.location.child('value') : resolved.location;
example = resolved.node;
}
if (isMultiple && typeof example?.value === 'undefined') {
return;
}
validateExample(
isMultiple ? example.value : example,
mediaType.schema!,
location,
ctx,
allowAdditionalProperties
);
}
},
},
};
};