( groupRules: Record<string, number>, rulesMap: Record<string, RuleData[]>, )
| 133 | } |
| 134 | |
| 135 | export function resolveGroupRefs( |
| 136 | groupRules: Record<string, number>, |
| 137 | rulesMap: Record<string, RuleData[]>, |
| 138 | ): { refs: Group['refs']; invalidRules: string[] } { |
| 139 | return Object.entries(groupRules).reduce<{ |
| 140 | refs: Group['refs']; |
| 141 | invalidRules: string[]; |
| 142 | }>( |
| 143 | (acc, [rule, weight]) => { |
| 144 | const matchedRuleIds = rule.endsWith('*') |
| 145 | ? expandWildcardRules(rule, Object.keys(rulesMap)) |
| 146 | : [rule]; |
| 147 | |
| 148 | const matchedRefs = matchedRuleIds.flatMap(ruleId => { |
| 149 | const matchingRules = rulesMap[ruleId] || []; |
| 150 | const weightPerRule = weight / matchingRules.length; |
| 151 | |
| 152 | return matchingRules.map(ruleData => ({ |
| 153 | slug: ruleToSlug(ruleData), |
| 154 | weight: weightPerRule, |
| 155 | })); |
| 156 | }); |
| 157 | |
| 158 | return { |
| 159 | refs: [...acc.refs, ...matchedRefs], |
| 160 | invalidRules: |
| 161 | matchedRefs.length > 0 |
| 162 | ? acc.invalidRules |
| 163 | : [...acc.invalidRules, rule], |
| 164 | }; |
| 165 | }, |
| 166 | { refs: [], invalidRules: [] }, |
| 167 | ); |
| 168 | } |
no test coverage detected