UNPKG

@redocly/openapi-core

Version:

See https://github.com/Redocly/redocly-cli

88 lines 3.02 kB
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