Features: - Add CLI with commands: start, add, remove, list, fetch, status, items - Auto-detect RSS format when adding feeds - Auto-run database migrations on startup - Extract full HTML content from RSS description field (NOS-style feeds) - Extract image URLs from RSS enclosure tags - Display images in terminal output with emoji - Include imageUrl in JSON formatter output Database: - Add image_url column to feed_items table - Update storage layer to persist imageUrl field Tests: - Add 10 CLI integration tests - Add 3 RSS parser tests for image/content extraction - Add 2 storage tests for imageUrl persistence Dependencies: - Add commander for CLI framework All 144 tests passing
30 lines
779 B
TypeScript
30 lines
779 B
TypeScript
import type { FeedItem } from '../../interfaces/feed.types.js';
|
|
|
|
interface JsonFeedItem {
|
|
id: string;
|
|
source: string;
|
|
title: string;
|
|
url: string;
|
|
publishedAt: string;
|
|
content?: string;
|
|
summary?: string;
|
|
imageUrl?: string;
|
|
}
|
|
|
|
export class JsonFormatter {
|
|
format(items: FeedItem[]): string {
|
|
const jsonItems: JsonFeedItem[] = items.map(item => ({
|
|
id: item.id,
|
|
source: item.source,
|
|
title: item.title,
|
|
url: item.url,
|
|
publishedAt: item.publishedAt.toISOString(),
|
|
...(item.content !== undefined && { content: item.content }),
|
|
...(item.summary !== undefined && { summary: item.summary }),
|
|
...(item.imageUrl !== undefined && { imageUrl: item.imageUrl })
|
|
}));
|
|
|
|
return JSON.stringify(jsonItems, null, 2);
|
|
}
|
|
}
|