UNPKG

@redocly/openapi-core

Version:

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

50 lines 1.91 kB
import { asserts, buildAssertCustomFunction } from '../rules/common/assertions/asserts.js'; export function groupAssertionRules(config, plugins) { if (!config.rules) { return {}; } // Create a new record to avoid mutating original const transformedRules = {}; // Collect assertion rules const assertions = []; for (const [ruleKey, rule] of Object.entries(config.rules)) { if (ruleKey.startsWith('rule/') && typeof rule === 'object' && rule !== null) { const assertion = rule; if (plugins) { registerCustomAssertions(plugins, assertion); // We may have custom assertion inside where block for (const context of assertion.where || []) { registerCustomAssertions(plugins, context); } } assertions.push({ ...assertion, assertionId: ruleKey, }); } else { // If it's not an assertion, keep it as is transformedRules[ruleKey] = rule; } } if (assertions.length > 0) { transformedRules.assertions = assertions; } return transformedRules; } function registerCustomAssertions(plugins, assertion) { for (const field of Object.keys(assertion.assertions || {})) { const [pluginId, fn] = field.split('/'); if (!pluginId || !fn) continue; const plugin = plugins.find((plugin) => plugin.id === pluginId); if (!plugin) { throw Error(`Plugin ${pluginId} isn't found.`); } if (!plugin.assertions || !plugin.assertions[fn]) { throw Error(`Plugin ${pluginId} doesn't export assertions function with name ${fn}.`); } asserts[field] = buildAssertCustomFunction(plugin.assertions[fn]); } } //# sourceMappingURL=group-assertion-rules.js.map