mirror of
https://github.com/opf/openproject.git
synced 2026-06-14 03:30:14 +00:00
[chore] remove abbreviated example nodes
- add custom rule to manipulate example objects - amend validation script to use config file
This commit is contained in:
+6
-1
@@ -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
|
||||
|
||||
@@ -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');
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user