Replace rss-parser with fast-xml-parser and add native feed parser; update Smartfeed to use parseFeedXML and adjust plugins/tests
- Replaced dependency on rss-parser with fast-xml-parser (package.json + deno.lock).
- Added ts/lib/feedparser.ts: a new native XML-based feed parser that detects and parses RSS 2.0, Atom 1.0 and RSS 1.0 (RDF) into a unified IParsedFeed structure.
- Updated Smartfeed parsing API to use parseFeedXML for parseFeedFromString and to fetch + parse XML in parseFeedFromUrl.
- Updated ts/plugins.ts to export fast-xml-parser's XMLParser instead of rss-parser.
- Implemented feed parsing utilities: content extraction, snippet creation, date normalization, enclosure/category handling and atom:link/feed metadata extraction.
- Added and/or updated comprehensive tests for creation, export, parsing, validation, podcast (Podcast 2.0) features to exercise the new parser and related behaviors.
Improve podcast episode validation, make Feed.itemIds protected, expand README and add tests
- PodcastFeed.addEpisode: validate iTunes duration separately (require itunesDuration) and ensure it is a positive number; audioLength must be a positive number; moved itunesDuration out of the generic required-fields list to allow proper numeric validation and clearer errors.
- Feed: changed itemIds from private to protected so subclasses (e.g. PodcastFeed) can access and enforce duplicate ID checks across episodes/items.
- Documentation: major README overhaul with Quick Start, Podcast examples, API reference, validation & security notes, best practices, and TypeScript usage examples.
- Tests: added comprehensive podcast tests (advanced features and validation) and updated/expanded test coverage for feed creation, export, parsing and validation to cover transcripts, funding, persons, explicit flags, and more.
- This is a backwards-compatible bugfix and documentation/test update; no breaking public API changes intended.
- Implement Feed class with full option validation, addItem validation (URLs, email, timestamp), duplicate ID protection, content sanitization and generation of RSS/Atom/JSON feeds.
- Add validation utilities (validateUrl, validateDomain, validateEmail, validateTimestamp, validateRequiredFields, sanitizeContent) in ts/validation.ts used across the module.
- Implement Smartfeed class functions: createFeed, createFeedFromArticleArray, parseFeedFromString and parseFeedFromUrl with rss-parser integration.
- Adjust module exports (ts/index.ts) and plugin imports (ts/plugins.ts) to match implemented classes.
- Add comprehensive test suite under test/ (creation, export, parsing, validation, integration) to exercise new functionality.
- Add deno.lock to lock dependency graph for reproducible builds.
## 2025-10-31 - 1.0.11 - smartfeed / feed
Add feed and validation utilities for the smartfeed plugin and perform related dependency, refactor, test, and CI updates.
- feat: implement feed and validation utilities for smartfeed to support improved feed generation and input validation.
- chore: bump feed dependency to v5.1.0 and adjust import paths for consistency with the updated package.
- refactor: improve Feed and SmartFeed class structure and formatting for readability and maintainability.
- fix: update test imports to use the new package path after refactor/import changes.
- chore: streamline plugin exports to a consistent structure.
- chore: update README for clarity and formatting improvements.
- chore: update TypeScript configuration for better compatibility.
- ci: add workflows to handle tag and non-tag pushes.
## 2020-10-25 to 2024-05-29 - 1.0.1..1.0.11 - housekeeping
Collection of minor releases, metadata updates and routine fixes made across multiple intermediate versions.
- Multiple small "fix(core): update" changes and routine release markers (1.0.2 → 1.0.11).
- Updates to package metadata and npmextra.json (githost) across several commits.
- Switch to new organization naming/scheme.
- Miscellaneous tsconfig and description updates.
- These changes were primarily maintenance, CI/package metadata, and release housekeeping.