UNPKG

@stoplight/spectral

Version:

A flexible object linter with out of the box support for OpenAPI v2 and v3.

42 lines 1.75 kB
"use strict"; 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