Skip to content

Utilities

Low-level utility functions for URL resolution and normalization. Used internally by findCanonical but exported for direct use.

typescript
import {
  normalizeUrl,
  resolveUrl,
  resolveFeedProtocol,
  addMissingProtocol,
  upgradeProtocol,
  fixMalformedProtocol,
} from 'feedcanon'

normalizeUrl()

Normalizes a URL by applying transformation options.

Parameters

ParameterTypeDescription
urlstringThe URL to normalize
optionsobjectNormalization options. Defaults to defaultNormalizeOptions

Options

The Default column shows the values used when options is omitted. A passed options object replaces the defaults, it is not merged with them: any option you leave out is off.

OptionDefaultDescription
stripProtocoltrueRemove protocol from URL
stripAuthenticationfalseRemove user:pass@
stripWwwtrueRemove www. prefix
stripTrailingSlashtrueRemove trailing / from paths
stripRootSlashtrueRemove / from root paths
collapseSlashestrueCollapse multiple slashes ////
stripHashtrueRemove #fragment
sortQueryParamstrueSort query params alphabetically
stripQueryParamsdefaultStrippedParamsArray of params to strip
stripQueryfalseRemove entire query string
stripEmptyQuerytrueRemove empty ?
lowercaseQueryfalseLowercase query param names and values
normalizeEncodingtrueNormalize %XX encoding
normalizeUnicodetrueNFC normalization for Unicode

Returns

string: The normalized URL, or the original URL if parsing fails.

Example

typescript
import { normalizeUrl } from 'feedcanon'

normalizeUrl('https://WWW.EXAMPLE.COM/feed/', {
  stripWww: true,
  stripTrailingSlash: true,
})
// 'https://example.com/feed'

normalizeUrl('https://WWW.EXAMPLE.COM/feed/?utm_source=rss&b=2&a=1#x')
// 'example.com/feed?a=1&b=2' (default options)

resolveUrl()

Resolves a URL by converting feed protocols, resolving relative URLs, and ensuring it's a valid HTTP(S) URL.

Parameters

ParameterTypeDescription
urlstringThe URL to resolve
basestringOptional base URL for relative resolution

Returns

string | undefined: The resolved HTTP(S) URL, or undefined if invalid.

Example

typescript
import { resolveUrl } from 'feedcanon'

resolveUrl('feed://example.com/rss.xml')
// 'https://example.com/rss.xml'

resolveUrl('/feed.xml', 'https://example.com/blog/')
// 'https://example.com/feed.xml'

resolveFeedProtocol()

Converts feed-related protocols to HTTP(S).

Parameters

ParameterTypeDefaultDescription
urlstringThe URL to convert
protocol'http' | 'https''https'Target protocol

Returns

string: The URL with converted protocol, or unchanged if not a feed protocol.

Supported Protocols

feed://, feed:https://, feed:http://, rss://, podcast://, pcast://, itpc://

Example

typescript
import { resolveFeedProtocol } from 'feedcanon'

resolveFeedProtocol('feed://example.com/rss.xml')
// 'https://example.com/rss.xml'

resolveFeedProtocol('itpc://example.com/podcast.xml')
// 'https://example.com/podcast.xml'

addMissingProtocol()

Adds protocol to URLs missing a scheme.

Parameters

ParameterTypeDefaultDescription
urlstringThe URL to process
protocol'http' | 'https''https'Protocol to add

Returns

string: The URL with protocol added, or unchanged if not applicable.

Example

typescript
import { addMissingProtocol } from 'feedcanon'

addMissingProtocol('//example.com/feed')
// 'https://example.com/feed'

addMissingProtocol('example.com/feed')
// 'https://example.com/feed'

upgradeProtocol()

Swaps an existing HTTP(S) protocol on a URL. Unlike addMissingProtocol, which only acts when the protocol is absent, this rewrites the scheme when one is already present.

Parameters

ParameterTypeDefaultDescription
urlstringThe URL to process
protocol'http' | 'https''https'Target protocol

Returns

string: The URL with the protocol swapped, or unchanged if no matching HTTP(S) scheme is present.

Notes

  • Case-insensitive on the matched protocol (HTTP:// is upgraded).
  • Only the leading scheme is touched; an http:// substring later in the path or query is left alone.
  • Protocol-relative URLs (//host) and non-HTTP schemes (mailto:, data:, ftp://, feed://) are left unchanged.

Example

typescript
import { upgradeProtocol } from 'feedcanon'

upgradeProtocol('http://example.com/feed')
// 'https://example.com/feed'

upgradeProtocol('https://example.com/feed', 'http')
// 'http://example.com/feed'

upgradeProtocol('//example.com/feed')
// '//example.com/feed' (unchanged)

fixMalformedProtocol()

Fixes common malformations in HTTP(S) protocols, such as typos, missing colons and extra slashes. resolveUrl calls it internally.

Parameters

ParameterTypeDescription
urlstringThe URL to fix

Returns

string: The URL with the protocol fixed, or unchanged if nothing matches.

Example

typescript
import { fixMalformedProtocol } from 'feedcanon'

fixMalformedProtocol('http:////example.com/feed')
// 'http://example.com/feed'

fixMalformedProtocol('htps://example.com/feed')
// 'https://example.com/feed'

fixMalformedProtocol('http//example.com/feed')
// 'http://example.com/feed'

fixMalformedProtocol('https://example.com/feed')
// 'https://example.com/feed' (unchanged)