packages feed

link-canonical-0.1.0.0: src/Link/Canonical/Rules.hs

module Link.Canonical.Rules
  ( -- * Domain rule types
    DomainRule (..),
    domainRule,

    -- * Application
    applyDomainRules,
    applyDomainRulesWithTrace,

    -- * Helpers
    matchesHost,
    matchesAnyHost,
    getHost,

    -- * Default rules
    defaultDomainRules,

    -- * Individual rules
    youtubeRule,
    amazonRule,
    twitterRule,
    githubRule,
    instagramRule,
    redditRule,
  )
where

import Link.Canonical.Rules.Amazon (amazonRule)
import Link.Canonical.Rules.GitHub (githubRule)
import Link.Canonical.Rules.Instagram (instagramRule)
import Link.Canonical.Rules.Reddit (redditRule)
import Link.Canonical.Rules.Twitter (twitterRule)
import Link.Canonical.Rules.Types
import Link.Canonical.Rules.YouTube (youtubeRule)

-- | Default set of domain rules
--
-- Rules are applied in order; first match wins.
--
-- Included rules:
-- - YouTube (youtu.be, youtube.com variants)
-- - Amazon (amazon.* regional variants)
-- - Twitter/X (twitter.com → x.com)
-- - GitHub (www.github.com → github.com, preserves line fragments)
-- - Instagram (instagram.com → www.instagram.com)
-- - Reddit (old.reddit.com, np.reddit.com → www.reddit.com)
--
-- Planned rules:
-- - LinkedIn
defaultDomainRules :: [DomainRule]
defaultDomainRules =
  [ youtubeRule,
    amazonRule,
    twitterRule,
    githubRule,
    instagramRule,
    redditRule
  ]