@redocly/cli
Version:
[@Redocly](https://redocly.com) CLI is your all-in-one API documentation utility. It builds, manages, improves, and quality-checks your API descriptions, all of which comes in handy for various phases of the API Lifecycle. Create your own rulesets to make
55 lines • 1.82 kB
JavaScript
import { createConfig, logger, regexFromString, } from '@redocly/openapi-core';
export async function resolveConfigForTarget(apiPath, targetRules, scorecardLevels = [], plugins = [], configPath) {
const result = {};
for (const level of scorecardLevels) {
const apis = {
[level.name]: {
root: apiPath,
rules: targetRules,
},
};
const config = await createConfig({ apis, ...level, plugins }, {
configPath,
});
result[level.name] = config.forAlias(level.name);
}
return result;
}
export function getTarget(targets, metadata) {
if (!targets) {
return undefined;
}
for (const target of targets) {
const matches = Object.entries(target.where?.metadata || {}).every(([key, value]) => isTargetMatch(key, value, metadata));
if (matches) {
return target;
}
}
return undefined;
}
function isTargetMatch(key, value, metadata) {
// support for ISO 8601 date ranges
if (value.match(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}Z)?\/(\d{4}-\d{2}-\d{2})?$/)) {
if (!metadata[key]) {
return false;
}
const [from, to] = value.split('/');
const date = new Date(metadata[key]);
return !(date < new Date(from) || (to && date > new Date(to)));
}
else if (value.match(/^\/.*\//)) {
if (!metadata[key]) {
return false;
}
try {
const regex = regexFromString(value);
return regex.test(metadata[key]);
}
catch (e) {
logger.error(`Invalid regex in scorecard target "${key}": ${value}`);
return false;
}
}
return metadata[key] === value;
}
//# sourceMappingURL=targets-handler.js.map