[chore] remove abbreviated example nodes

- add custom rule to manipulate example objects
- amend validation script to use config file
This commit is contained in:
Eric Schubert
2026-02-13 14:53:07 +01:00
parent 887ded5714
commit 6943ad129e
4 changed files with 59 additions and 4 deletions
+6 -1
View File
@@ -2,6 +2,11 @@ apis:
main:
root: docs/api/apiv3/openapi-spec.yml
lint:
extends:
- recommended
plugins:
- '.redocly/plugins/custom-rules.js'
rules:
custom-rules/skip-abbreviated-examples: warn
+12
View File
@@ -0,0 +1,12 @@
import SkipAbbreviatedExamples from './rules/skip-abbreviated-examples.js'
export default function CustomRulesPlugin() {
return {
id: 'custom-rules',
rules: {
oas3: {
'skip-abbreviated-examples': SkipAbbreviatedExamples,
}
}
}
}
@@ -0,0 +1,38 @@
function removeNodesWithKey(obj, key) {
if (obj === null) return;
if (typeof obj === 'string') return;
if (typeof obj === 'number') return;
if (Array.isArray(obj)) {
for (let i = obj.length - 1; i >= 0; i--) {
if (obj[i] === null) continue;
if (obj[i][key] !== undefined) {
obj.splice(i, 1);
}
}
} else {
const keys = Object.keys(obj);
for (const k of keys) {
if (obj[k] === null) continue;
if (obj[k][key] !== undefined) {
delete obj[k];
}
}
}
for (const k of Object.keys(obj)) {
removeNodesWithKey(obj[k], key);
}
}
export default function SkipAbbreviatedExamples() {
return {
Example: {
enter(example, _ctx) {
// remove every nested object with the `_abbreviated` key,
// but keep the rest to be run against other rules.
removeNodesWithKey(example.value, '_abbreviated');
},
},
}
}
+1 -1
View File
@@ -18,7 +18,7 @@ begin
file.puts full_spec
end
system("npx @redocly/cli lint #{openapi_yaml_spec_path}")
system("npx @redocly/cli lint --config=.redocly.yaml #{openapi_yaml_spec_path}")
status = $?.exitstatus
ensure