mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-10-02 20:57:03 +00:00
27 lines
941 B
TypeScript
27 lines
941 B
TypeScript
import type { DiscoveredFeed, FeedDiscoveryResponse } from "../types.js";
|
|
|
|
export function renderOpml(response: FeedDiscoveryResponse) {
|
|
const outlines = response.results.map(renderOutline).join("\n");
|
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
<opml version="2.0">
|
|
<head>
|
|
<title>LogicSRC feed discovery: ${escapeXml(response.query)}</title>
|
|
</head>
|
|
<body>
|
|
${outlines}
|
|
</body>
|
|
</opml>`;
|
|
}
|
|
|
|
function renderOutline(feed: DiscoveredFeed) {
|
|
return ` <outline text="${escapeXml(feed.title)}" title="${escapeXml(feed.title)}" type="rss" xmlUrl="${escapeXml(feed.canonicalFeedUrl ?? feed.feedUrl)}"${feed.homepageUrl ? ` htmlUrl="${escapeXml(feed.homepageUrl)}"` : ""} category="${escapeXml(feed.kind)}" />`;
|
|
}
|
|
|
|
export function escapeXml(value: string) {
|
|
return value
|
|
.replaceAll("&", "&")
|
|
.replaceAll("<", "<")
|
|
.replaceAll(">", ">")
|
|
.replaceAll('"', """)
|
|
.replaceAll("'", "'");
|
|
}
|