mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-18 02:29:41 +02:00
refactor(shared-rss): extract RSS parsing + Readability into one package
news-ingester and apps/api both shipped their own copy of rss-parser + jsdom + Readability glue. Single source now in packages/shared-rss. Adds discoverFeeds (rel=alternate + common-paths probe) and validateFeed which News Research will use. JSDOM virtualConsole is silenced once, in the package, instead of in two parallel call sites. - packages/shared-rss: parse, extract, discover, validate - services/news-ingester: drop local parsers, depend on @mana/shared-rss - apps/api: drop @mozilla/readability + jsdom direct deps, use shared Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5ae7f99fe1
commit
b768a0ffce
16 changed files with 414 additions and 252 deletions
24
packages/shared-rss/src/validate.ts
Normal file
24
packages/shared-rss/src/validate.ts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import { parseFeedMeta } from './parse';
|
||||
import type { FeedValidation } from './types';
|
||||
|
||||
const SAMPLE_LIMIT = 5;
|
||||
|
||||
export async function validateFeed(url: string): Promise<FeedValidation> {
|
||||
try {
|
||||
const parsed = await parseFeedMeta(url);
|
||||
return {
|
||||
ok: parsed.items.length > 0,
|
||||
itemCount: parsed.items.length,
|
||||
title: parsed.title,
|
||||
sample: parsed.items.slice(0, SAMPLE_LIMIT),
|
||||
};
|
||||
} catch (err) {
|
||||
return {
|
||||
ok: false,
|
||||
itemCount: 0,
|
||||
title: null,
|
||||
sample: [],
|
||||
error: err instanceof Error ? err.message : String(err),
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue