@stoplight/spectral
Version:
A flexible object linter with out of the box support for OpenAPI v2 and v3.
42 lines • 1.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const lodash_1 = require("lodash");
const reader_1 = require("../fs/reader");
const ajv_1 = require("./ajv");
const path_1 = require("./path");
const validation_1 = require("./validation");
function readRulesFromRulesets(...files) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const rulesets = yield Promise.all(files.map(file => readRulesFromRuleset(file)));
return lodash_1.merge({}, ...rulesets);
});
}
exports.readRulesFromRulesets = readRulesFromRulesets;
function readRulesFromRuleset(file) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const parsed = yield reader_1.readParsable(file, 'utf8');
const { data: ruleset } = parsed;
const errors = validation_1.validateRuleset(ruleset);
if (errors.length) {
throw {
messages: [ajv_1.formatAjv(errors), `Provided ruleset '${file}' is not valid`],
};
}
const extendz = ruleset.extends;
let extendedRules = {};
if (extendz && extendz.length) {
extendedRules = yield blendRuleCollections(extendz.map(extend => {
return readRulesFromRuleset(path_1.resolvePath(file, extend));
}));
}
return lodash_1.merge(extendedRules, ruleset.rules);
});
}
function blendRuleCollections(futureCollections) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return Promise.all(futureCollections).then(collections => lodash_1.merge({}, ...collections));
});
}
exports.blendRuleCollections = blendRuleCollections;
//# sourceMappingURL=reader.js.map