JSPM

@iocium/favicon-extractor

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 105
  • Score
    100M100P100Q10165F
  • License MIT

Extract favicons and app icons from HTML and manifests (Cloudflare Workers friendly)

Package Exports

  • @iocium/favicon-extractor

Readme

@iocium/favicon-extractor

npm build codecov npm downloads bundle size types license

Extracts all relevant favicons, Apple touch icons, Android web app icons, and manifest-defined icons from a given URL.
Designed to be edge-compatible (Cloudflare Workers safe) and fully testable in Node.js.


๐Ÿš€ Features

  • Parses HTML <link> and <meta> tags for favicon/icon references
  • Follows <link rel="manifest"> to extract additional icons
  • Groups icons by platform (standard, Apple, Android)
  • Identifies the largest icon per MIME type
  • Fully type-safe (written in TypeScript)
  • Compatible with Cloudflare Workers and Node.js environments

๐Ÿ“ฆ Installation

npm install @iocium/favicon-extractor

๐Ÿงช Basic Usage

import { FaviconExtractor } from "@iocium/favicon-extractor";

const extractor = new FaviconExtractor();

const icons = await extractor.fetchAndExtract("https://example.com");
console.log(icons);

โš™๏ธ Grouping and MIME Support

const grouped = extractor.groupIcons(icons);
/*
{
  standardIcons: [...],
  appleTouchIcons: [...],
  androidIcons: [...]
}
*/

const withMimeTypes = extractor.addMimeTypes(icons);
/*
[
  { url: "...", type: "...", size: "...", mimeType: "image/png" },
  ...
]
*/

๐Ÿ–ผ๏ธ Get the Largest Icon by Type

const largestIcons = extractor.getLargestIconsByMimeType(icons);

Each returned icon is the highest resolution found for that MIME type.


๐Ÿง  Advanced: Manual Normalization

// If you already have raw relative icon paths:
extractor["icons"] = ["/favicon.ico", "images/logo-192.png"];
const absoluteUrls = extractor["normalizeIcons"]("https://example.com");

console.log(absoluteUrls);
// โ†’ ["https://example.com/favicon.ico", "https://example.com/images/logo-192.png"]

๐Ÿงช Running Tests

npm run test

โœ… With Coverage

npm run test:coverage

Open the full report:

open coverage/lcov-report/index.html

Thresholds: 90% branches / 100% lines / 100% statements


๐Ÿ‘ท Built for Edge Platforms

This library is compatible with Cloudflare Workers thanks to:

  • No use of Node-specific APIs
  • HTMLRewriter support with test mocks
  • Lightweight and modular core

๐Ÿง‘โ€๐Ÿ’ป License

MIT


๐Ÿ™Œ Contributing

Pull requests and improvements welcome!
Feel free to file an issue if you need support for additional icon types or HTML quirks.