TflSource.fetchItems() now returns one TflStatusFeedItem with an
alerts array instead of separate items per line disruption. Signals
use the highest severity. Alerts sorted by station distance.
Co-authored-by: Ona <no-reply@ona.com>
Empty lines array caused fetchLineStatuses to build /Line//Status
URL, resulting in a 404 from the TFL API. Now defaults to all
lines when the array is empty.
Also switches fetchStations to Promise.allSettled so individual
line failures don't break the entire station fetch.
Co-authored-by: Ona <no-reply@ona.com>
* feat(tfl): add FeedItemRenderer for TfL alerts
Implement renderTflAlert using JRX and @aelis/components.
Upgrade @nym.sh/jrx to 0.2.0 for null child support.
Co-authored-by: Ona <no-reply@ona.com>
* fix(tfl): add jsxImportSource pragma for CI
The CI test runner doesn't use per-package tsconfig.json,
so the pragma is needed alongside the tsconfig setting.
Co-authored-by: Ona <no-reply@ona.com>
* fix(ci): run tests per-package via bun run test
Use 'bun run test' (which runs 'bun run --filter * test')
instead of 'bun test' so each package runs tests from its
own directory. Add jsxImportSource pragma to renderer files
since consumers without a JRX tsconfig also import them.
Co-authored-by: Ona <no-reply@ona.com>
* fix(tfl): handle near-1km boundary in formatDistance
Values like 0.9999km rounded to 1000m and displayed as
'1000m away'. Now converts to meters first and switches
to km format when rounded meters >= 1000.
Co-authored-by: Ona <no-reply@ona.com>
---------
Co-authored-by: Ona <no-reply@ona.com>
Each FeedSource implementation now sets sourceId on items
it produces, allowing consumers to trace items back to
their originating source.
Co-authored-by: Ona <no-reply@ona.com>
Rename all references across the codebase: package names,
imports, source IDs, directory names, docs, and configs.
Co-authored-by: Ona <no-reply@ona.com>