@redocly/openapi-core
Version:
See https://github.com/Redocly/redocly-cli
88 lines • 3.02 kB
JavaScript
import { NormalizedConfigTypes } from '../types/redocly-yaml.js';
import { normalizeVisitors } from '../visitors.js';
import { replaceRef } from '../ref-utils.js';
import { bundleExtends } from './bundle-extends.js';
import { preResolvePluginPath } from './config-resolvers.js';
export const PLUGINS_COLLECTOR_VISITOR_ID = 'pluginsCollector';
function collectorHandleNode(node, ctx) {
if (Array.isArray(node.plugins)) {
const { plugins, rootConfigDir } = ctx.getVisitorData();
plugins.push(...node.plugins.map((p) => {
return preResolvePluginPath(p, ctx.location.source.absoluteRef.replace(/^file:\/\//, ''), // remove file URL prefix for OpenAPI language server
rootConfigDir);
}));
}
}
export const pluginsCollectorVisitor = normalizeVisitors([
{
severity: 'error',
ruleId: PLUGINS_COLLECTOR_VISITOR_ID,
visitor: {
ref: {},
ConfigGovernance: {
leave(node, ctx) {
collectorHandleNode(node, ctx);
},
},
ConfigApisProperties: {
leave(node, ctx) {
collectorHandleNode(node, ctx);
},
},
'rootRedoclyConfigSchema.scorecard.levels_items': {
leave(node, ctx) {
collectorHandleNode(node, ctx);
},
},
ConfigRoot: {
leave(node, ctx) {
collectorHandleNode(node, ctx);
},
},
},
},
], NormalizedConfigTypes);
export const CONFIG_BUNDLER_VISITOR_ID = 'configBundler';
function bundlerHandleNode(node, ctx) {
if (node.extends) {
const { plugins } = ctx.getVisitorData();
const bundled = bundleExtends({ node, ctx, plugins });
Object.assign(node, bundled);
delete node.extends;
}
}
export const configBundlerVisitor = normalizeVisitors([
{
severity: 'error',
ruleId: CONFIG_BUNDLER_VISITOR_ID,
visitor: {
ref: {
leave(node, ctx, resolved) {
replaceRef(node, resolved, ctx);
},
},
ConfigGovernance: {
leave(node, ctx) {
bundlerHandleNode(node, ctx);
},
},
ConfigApisProperties: {
leave(node, ctx) {
// ignore extends from root config if defined in the current node
bundlerHandleNode(node, ctx);
},
},
'rootRedoclyConfigSchema.scorecard.levels_items': {
leave(node, ctx) {
bundlerHandleNode(node, ctx);
},
},
ConfigRoot: {
leave(node, ctx) {
bundlerHandleNode(node, ctx);
},
},
},
},
], NormalizedConfigTypes);
//# sourceMappingURL=visitors.js.map