NOTE: this features is experimental. Modifying your tree may break codeframes in errors
By default, custom visitors are run after the built-in ones. However, there might appear such situation, when the input data should be mutated before applying default rules and/or bundling. For this case, you might want to run certain custom visitors before in-built visitors.
You can do it with transformers visitors.
To create a visitor which will run before the default ones you should define a parameter transformers in your .openapi-cli.yaml config file and pass it a path to the JavaScript file similar to one you use for usual custom visitors.
To change the data in the transformer visitor you can modify the node object passed in as a parameter. For example, following example checks if there's a vendor extension x-redocly-overlay field inside node, it reads a file determined by the field's content and updates node with files contents.
class OverlaysMerger {
static get rule() {
return 'writeCheck';
}
any() {
return {
onEnter: (node, _type, _ctx) => {
if (node['x-redocly-overlay']) {
const definitionDir = path.dirname(ctx.filePath);
const overlayPath = path.resolve(definitionDir, node['x-redocly-overlay'].path);
if (fs.existsSync(overlayPath)) {
const patch = JSON.parse(fs.readFileSync(overlayPath));
Object.keys(patch).forEach((k) => {
node[k] = patch[k];
});
delete node['x-redocly-overlay'];
}
}
},
};
}
}The only difference between customRules and transformers is the execution order. customRules are run after the default visitors and transformers are run before them.