mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-10-19 23:29:18 +08:00
a7faf80497
Since the namespace prefix was added in #14800, function targets were stringified into the rules built from the route modules (build:routes and the dev API), e.g. /81params=>{...}. Production loads routes from JSON, where functions are already dropped and the route path is used, so do the same in both producers.
51 lines
2.0 KiB
TypeScript
51 lines
2.0 KiB
TypeScript
import { parse } from 'tldts';
|
|
|
|
import { ensureAllLoaded, namespaces } from '@/registry';
|
|
import type { RadarDomain } from '@/types';
|
|
|
|
let radar: Record<string, RadarDomain> | undefined;
|
|
|
|
export const getRadarRules = async (): Promise<Record<string, RadarDomain>> => {
|
|
if (radar) {
|
|
return radar;
|
|
}
|
|
await ensureAllLoaded();
|
|
|
|
const rules: Record<string, RadarDomain> = {};
|
|
for (const namespace in namespaces) {
|
|
for (const path in namespaces[namespace].routes) {
|
|
const realPath = `/${namespace}${path}`;
|
|
const data = namespaces[namespace].routes[path];
|
|
if (data.radar?.length) {
|
|
for (const radarItem of data.radar) {
|
|
const parsedDomain = parse(new URL('https://' + radarItem.source[0]).hostname);
|
|
const subdomain = parsedDomain.subdomain || '.';
|
|
const domain = parsedDomain.domain;
|
|
if (!domain) {
|
|
continue;
|
|
}
|
|
if (!Object.hasOwn(rules, domain)) {
|
|
rules[domain] = {
|
|
_name: namespaces[namespace].name,
|
|
} as RadarDomain;
|
|
}
|
|
if (!Object.hasOwn(rules[domain], subdomain)) {
|
|
rules[domain][subdomain] = [];
|
|
}
|
|
rules[domain][subdomain].push({
|
|
title: radarItem.title || data.name,
|
|
docs: `https://docs.rsshub.app/routes/${namespace}`,
|
|
source: radarItem.source.map((source) => {
|
|
const sourceURL = new URL('https://' + source);
|
|
return sourceURL.pathname + sourceURL.search + sourceURL.hash;
|
|
}),
|
|
target: typeof radarItem.target === 'string' && radarItem.target ? `/${namespace}${radarItem.target}` : realPath,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
radar = rules;
|
|
return radar;
|
|
};
|