MCPcopy Create free account
hub / github.com/VPSDance/ai-proxy-rules / buildProviderData

Function buildProviderData

scripts/sync/build.ts:129–173  ·  view source on GitHub ↗
(
  provider: SourceProvider,
  baseDir: string,
  context: BuildContext = {}
)

Source from the content-addressed store, hash-verified

127}
128
129export async function buildProviderData(
130 provider: SourceProvider,
131 baseDir: string,
132 context: BuildContext = {}
133): Promise<SourceProviderData> {
134 const normalizedProvider = sourceProviderSchema.parse(provider);
135 const fetcher = context.fetcher ?? defaultFetcher;
136 const sourceRules = await loadSourceRules(normalizedProvider.sources, baseDir, fetcher, context.cache);
137 const removeRules = normalizePartialRuleSet(normalizedProvider.patch.remove);
138 const explicitRules = mergeRuleSets(
139 normalizedProvider.groups.map((group) => normalizePartialRuleSet(group.include))
140 );
141 let remainingSourceRules = subtractRuleSet(subtractRuleSet(sourceRules, removeRules), explicitRules);
142
143 const groups: RuleGroup[] = [];
144
145 for (const group of normalizedProvider.groups) {
146 const includeRules = normalizePartialRuleSet(group.include);
147 const requestedKeys = resolveFromSourceKeys(group.fromSource);
148 const sourceGroupRules = pickRuleKeys(remainingSourceRules, requestedKeys);
149 let rules = mergeRuleSets([includeRules, sourceGroupRules]);
150 rules = subtractRuleSet(rules, removeRules);
151
152 groups.push({
153 name: group.name,
154 rules
155 });
156
157 if (requestedKeys.length > 0) {
158 remainingSourceRules = subtractRuleSet(remainingSourceRules, sourceGroupRules);
159 }
160 }
161
162 const normalizedGroups = compactGroups(removeCoveredDomains(groups.map((group) => group.rules)), groups);
163
164 return {
165 provider: normalizedProvider.provider,
166 name: normalizedProvider.name,
167 description: normalizedProvider.description,
168 categories: normalizedProvider.categories,
169 aliases: normalizedProvider.aliases,
170 allowDangerousDomainSuffix: normalizedProvider.allowDangerousDomainSuffix,
171 groups: normalizedGroups
172 };
173}
174
175function resolveFromSourceKeys(value: boolean | RuleKey[]): RuleKey[] {
176 if (value === true) {

Callers 2

syncFunction · 0.85
sync.test.tsFile · 0.85

Calls 8

loadSourceRulesFunction · 0.85
normalizePartialRuleSetFunction · 0.85
mergeRuleSetsFunction · 0.85
subtractRuleSetFunction · 0.85
resolveFromSourceKeysFunction · 0.85
pickRuleKeysFunction · 0.85
compactGroupsFunction · 0.85
removeCoveredDomainsFunction · 0.85

Tested by

no test coverage detected