pulse/modules/formatter/json.formatter.ts
Edo Limburg c79eb6d76d Add CLI entry point, RSS content extraction, and image support
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
2026-05-05 23:05:30 +02:00

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);
}
}