Open marianobntz opened 5 months ago
Import this and it should work: import type { Async2Rule } from "@redocly/openapi-core/lib/visitors.d.js";
@marianobntz how exactly are you trying to apply the rules? Could you provide an example of what doesn't work for you?
I have this js file "custom_rules.js"
`const path = require('path');
function FileNameArtifactRule() {
return {
Info: {
enter(operation, ctx) {
const split = ctx.location.source.absoluteRef.split(path.sep);
const apiFile = split[split.length - 1];
const operationName = operation["x-name"];
const splitVersion = operation.version.split(".");
const operationVersion = ${splitVersion[0]}.${splitVersion[1]}
;
const expected = operationName + "-" + operationVersion + ".json"
if (apiFile !== expected) {
ctx.report({
message: El nombre del archivo "${apiFile}" debe coincidir con el info.x-name "${operationName}" y la info.versión "${operationVersion}"!
,
location: ctx.location.child('x-name'),
suggest: [El archivo debería ser ${expected}
]
})
}
}
}
}
}
function AddSourceLinkDecorator() { return { Root: { leave(root) { // console.log(operation); console.log(root); // console.log(ctx.type.properties.externalDocs); root.externalDocs = { url: "http://localhost:8080" } } } } }
module.exports = { id: 'custom-rules', rules: { oas3: { 'file-name-artifact': FileNameArtifactRule, 'add-source-link': AddSourceLinkDecorator, }, async: { 'file-name-artifact': FileNameArtifactRule, 'add-source-link': AddSourceLinkDecorator, } } };
` and I use it like this:
`plugins:
rules: custom-rules/file-name-artifact: error `
This works fine when I validate openapi json files, but when I do it with asyncapi files I get this warning:
.\configuration\oas\sys\api-utils\cache-messages-1.0.json: validated in 8ms
Woohoo! Your API description is valid. 🎉
[WARNING] Unused rules found in C:\Users\m_benitez\work\git\dd-apis\resources\redocly\asyncapi-development.yaml: custom-rules/file-name-artifact. Check the spelling and verify the added plugin prefix.
Of course the validation does not run :-)
same thing happens when I add a custom decorator... the same warning
[WARNING] Unused rules found in C:\Users\m_benitez\work\farmacity\git\dd-apis\resources\redocly\asyncapi-development.yaml: custom-rules/file-name-artifact. [WARNING] Unused decorators found in C:\Users\m_benitez\work\farmacity\git\dd-apis\resources\redocly\asyncapi-development.yaml: custom-rules/add-source-link.
Import this and it should work: import type { Async2Rule } from "@redocly/openapi-core/lib/visitors.d.js";
Where do I put this line? inside the custom js ? If I put it on top of the file it breaks compilation.
Thanks!!
There are some asyncapi rules in the lib @redocly/openapi-core/src/rules/async2. Look there and make yours :)
So the problem was that I was not exporting properly the rules in my js file...
The proper way to add asyncapi rules and decorators is using async2 as the key...
module.exports = { id: 'custom-rules', rules: { oas3: { 'file-name-artifact': FileNameArtifactRule, 'add-source-link': AddSourceLinkDecorator, }, async2: { 'file-name-artifact': FileNameArtifactRule, 'add-source-link': AddSourceLinkDecorator, } } };
I could not find that proper keyword anywhere in the documentation. I guess that is the root problem.
Best
Currently the custom rules do not apply to asyncapi lint validation.
Any restriction (other than priorities) to add this feature?
Thanks