• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Kikobeats / html-urls / 30737926164
99%

Build:
DEFAULT BRANCH: master
Ran 02 Aug 2026 07:31AM UTC
Jobs 1
Files 1
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

02 Aug 2026 07:30AM UTC coverage: 99.375% (-0.6%) from 100.0%
30737926164

push

github

web-flow
fix: preserve unresolved links and normalize whitelist hosts (#94)

* fix: preserve unresolved links and normalize whitelist hosts

Deduping keyed only on `uri` collapsed every relative/fragment link to
one entry when no base URL was provided. Exact whitelist hosts without a
trailing slash also failed to match normalizeUrl's bare-host form.

Co-authored-by: kikohumanbeatbox <kikohumanbeatbox@gmail.com>

* fix: only treat `*` as a whitelist wildcard

`matcher@4` supports `*` and `!` and nothing else, so `?` and `[` are
literal characters. Skipping normalization on them left every whitelist
entry carrying a query string unnormalized, and therefore unable to match
the normalized `uri`:

    getLinks({ html: '<a href="https://evil.com/?a=1">',
               whitelist: ['https://evil.com?a=1'] })
    // => ['https://evil.com/?a=1']  not excluded

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHRsqWHHBrQbqkFmBvhtxN

* refactor: trim whitelist and dedupe helpers

`getDedupeKey` reads the two fields directly: `link` is always the object
literal `getLink` builds, so lodash `get` bought nothing but path parsing
on every comparison of an O(n^2) scan.

Drop the `uid !== undefined` guard: `matcher([undefined], patterns)`
returns `[]`, so `isEmpty(match)` already kept the link.

Drop the non-string whitelist guard: the documented contract is an array
of pattern strings, and nothing exercised it.

Move the new fixtures onto `generateHtml`, which every other test uses.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHRsqWHHBrQbqkFmBvhtxN

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: kikohumanbeatbox <kikohumanbeatbox@gmail.com>
Co-authored-by: Kiko Beats <josefrancisco.verdu@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

45 of 46 branches covered (97.83%)

Branch coverage included in aggregate %.

18 of 18 new or added lines in 1 file covered. (100.0%)

114 of 114 relevant lines covered (100.0%)

116.83 hits per line

Jobs
ID Job ID Ran Files Coverage
1 30737926164.1 02 Aug 2026 07:31AM UTC 1
99.38
GitHub Action Run
Source Files on build 30737926164
  • Tree
  • List 1
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30737926164
  • a0186f4b on github
  • Prev Build on master (#30556916444)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc