UNPKG

1.84 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const jp = require("jsonpath");
4const linter_1 = require("./linter");
5exports.runRules = (parsedResult, rules, functions, opts) => {
6 let results = [];
7 for (const name in rules) {
8 if (!rules.hasOwnProperty(name))
9 continue;
10 const rule = rules[name];
11 if (!rule)
12 continue;
13 if (rule.hasOwnProperty('enabled') && !rule.enabled) {
14 continue;
15 }
16 try {
17 results = results.concat(runRule(parsedResult, rule, functions, opts));
18 }
19 catch (e) {
20 console.error(`Unable to run rule '${name}':\n${e}`);
21 }
22 }
23 return results;
24};
25const runRule = (parsedResult, rule, functions, opts) => {
26 const { parsed } = parsedResult;
27 const { data: target } = parsed;
28 let results = [];
29 let nodes = [];
30 if (rule.given && rule.given !== '$') {
31 nodes = jp.nodes(target, rule.given);
32 }
33 else {
34 nodes.push({
35 path: ['$'],
36 value: target,
37 });
38 }
39 for (const node of nodes) {
40 try {
41 const thens = Array.isArray(rule.then) ? rule.then : [rule.then];
42 for (const then of thens) {
43 const func = functions[then.function];
44 if (!func) {
45 console.warn(`Function ${then.function} not found. Called by rule ${rule.name}.`);
46 continue;
47 }
48 results = results.concat(linter_1.lintNode(node, rule, then, func, opts, parsedResult));
49 }
50 }
51 catch (e) {
52 console.warn(`Encountered error when running rule '${rule.name}' on node at path '${node.path}':\n${e}`);
53 }
54 }
55 return results;
56};
57//# sourceMappingURL=runner.js.map
\No newline at end of file