(providers: ProviderSource[])
| 79 | return aggregateProviderSet(scopedProviders, id, name, description); |
| 80 | } |
| 81 | |
| 82 | function aggregateProviderSet( |
| 83 | providers: ProviderSource[], |
| 84 | id: string, |
| 85 | name: string, |
| 86 | description: string |
| 87 | ): RenderTarget { |
| 88 | const groups = providers.flatMap((provider) => |
| 89 | provider.groups.map((group) => ({ |
| 90 | name: `${provider.name} / ${group.name}`, |
| 91 | rules: group.rules |
| 92 | })) |
| 93 | ); |
| 94 | |
| 95 | return { |
| 96 | id, |
| 97 | name, |
| 98 | description, |
| 99 | groups, |
| 100 | rules: mergeRuleSets(providers.map((provider) => provider.rules)) |
| 101 | }; |
| 102 | } |
| 103 | |
| 104 | export function aggregateProvidersByCategory(providers: ProviderSource[]): RenderTarget[] { |
| 105 | const byCategory = new Map<ProviderCategory, ProviderSource[]>(); |
| 106 | for (const provider of providers.filter((provider) => (provider.scope ?? "global") === "global")) { |
| 107 | for (const category of provider.categories ?? []) { |
| 108 | const categoryProviders = byCategory.get(category) ?? []; |
| 109 | categoryProviders.push(provider); |
| 110 | byCategory.set(category, categoryProviders); |
| 111 | } |
| 112 | } |
| 113 | |
| 114 | return providerCategories.flatMap((category) => { |
| 115 | const categoryProviders = byCategory.get(category) ?? []; |
| 116 | if (categoryProviders.length === 0) { |
no test coverage detected