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
43 lines
1020 B
TypeScript
43 lines
1020 B
TypeScript
/**
|
|
* Kysely database type definitions.
|
|
* Defines the table schemas for type-safe queries.
|
|
*/
|
|
|
|
export interface FeedItemTable {
|
|
id: string;
|
|
source: string;
|
|
title: string;
|
|
url: string;
|
|
published_at: string; // ISO 8601 format
|
|
content: string | null;
|
|
summary: string | null;
|
|
image_url: string | null;
|
|
created_at: string; // ISO 8601 format
|
|
}
|
|
|
|
export interface SeenIdTable {
|
|
id: string;
|
|
seen_at: string; // ISO 8601 format
|
|
}
|
|
|
|
export interface FeedSourceTable {
|
|
id: string;
|
|
url: string;
|
|
name: string | null;
|
|
format: 'rss' | 'atom';
|
|
poll_interval_ms: number;
|
|
is_active: number; // SQLite stores boolean as 0/1
|
|
last_fetched_at: string | null; // ISO 8601
|
|
last_success_at: string | null; // ISO 8601
|
|
consecutive_failures: number;
|
|
created_at: string; // ISO 8601
|
|
updated_at: string; // ISO 8601
|
|
}
|
|
|
|
// Database interface used by Kysely
|
|
export interface Database {
|
|
feed_items: FeedItemTable;
|
|
seen_ids: SeenIdTable;
|
|
feed_sources: FeedSourceTable;
|
|
}
|