( rules: RuleData[], groups: CustomGroup[], )
| 91 | } |
| 92 | |
| 93 | export function groupsFromCustomConfig( |
| 94 | rules: RuleData[], |
| 95 | groups: CustomGroup[], |
| 96 | ): Group[] { |
| 97 | const rulesMap = createRulesMap(rules); |
| 98 | |
| 99 | return groups.map(group => { |
| 100 | const groupRules = Array.isArray(group.rules) |
| 101 | ? Object.fromEntries(group.rules.map(rule => [rule, 1])) |
| 102 | : group.rules; |
| 103 | |
| 104 | const { refs, invalidRules } = resolveGroupRefs(groupRules, rulesMap); |
| 105 | |
| 106 | if (invalidRules.length > 0 && Object.entries(groupRules).length > 0) { |
| 107 | if (refs.length === 0) { |
| 108 | throw new Error( |
| 109 | `Invalid rule configuration in group ${group.slug}. All rules are invalid.`, |
| 110 | ); |
| 111 | } |
| 112 | logger.warn( |
| 113 | `Some rules in group ${group.slug} are invalid: ${invalidRules.join(', ')}`, |
| 114 | ); |
| 115 | } |
| 116 | |
| 117 | return { |
| 118 | slug: group.slug, |
| 119 | title: group.title, |
| 120 | refs, |
| 121 | }; |
| 122 | }); |
| 123 | } |
| 124 | |
| 125 | export function createRulesMap(rules: RuleData[]): Record<string, RuleData[]> { |
| 126 | return rules.reduce<Record<string, RuleData[]>>( |
no test coverage detected