1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const jp = require("jsonpath");
|
4 | const linter_1 = require("./linter");
|
5 | exports.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 | };
|
25 | const 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 |
|
\ | No newline at end of file |