-
-
Notifications
You must be signed in to change notification settings - Fork 122
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b4201b4
commit 35ce2d4
Showing
4 changed files
with
218 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
export interface Options { | ||
/** | ||
* @default 'http:' | ||
*/ | ||
readonly defaultProtocol?: string; | ||
|
||
/** | ||
* Prepends `defaultProtocol` to the URL if it's protocol-relative. | ||
* | ||
* @default true | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('//sindresorhus.com:80/'); | ||
* //=> 'http://sindresorhus.com' | ||
* | ||
* normalizeUrl('//sindresorhus.com:80/', {normalizeProtocol: false}); | ||
* //=> '//sindresorhus.com' | ||
*/ | ||
readonly normalizeProtocol?: boolean; | ||
|
||
/** | ||
* Normalizes `https:` URLs to `http:`. | ||
* | ||
* @default false | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('https://sindresorhus.com:80/'); | ||
* //=> 'https://sindresorhus.com' | ||
* | ||
* normalizeUrl('https://sindresorhus.com:80/', {forceHttp: true}); | ||
* //=> 'http://sindresorhus.com' | ||
*/ | ||
readonly forceHttp?: boolean; | ||
|
||
/** | ||
* Normalizes `http:` URLs to `https:`. | ||
* | ||
* This option can't be used with the `forceHttp` option at the same time. | ||
* | ||
* @default false | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('https://sindresorhus.com:80/'); | ||
* //=> 'https://sindresorhus.com' | ||
* | ||
* normalizeUrl('http://sindresorhus.com:80/', {forceHttps: true}); | ||
* //=> 'https://sindresorhus.com' | ||
*/ | ||
readonly forceHttps?: boolean; | ||
|
||
/** | ||
* Strip the [authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) part of a URL. | ||
* | ||
* @default true | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('user:password@sindresorhus.com'); | ||
* //=> 'https://sindresorhus.com' | ||
* | ||
* normalizeUrl('user:password@sindresorhus.com', {stripAuthentication: false}); | ||
* //=> 'https://user:password@sindresorhus.com' | ||
*/ | ||
readonly stripAuthentication?: boolean; | ||
|
||
/** | ||
* Removes hash from the URL. | ||
* | ||
* @default false | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('sindresorhus.com/about.html#contact'); | ||
* //=> 'http://sindresorhus.com/about.html#contact' | ||
* | ||
* normalizeUrl('sindresorhus.com/about.html#contact', {stripHash: true}); | ||
* //=> 'http://sindresorhus.com/about.html' | ||
*/ | ||
readonly stripHash?: boolean; | ||
|
||
/** | ||
* Removes HTTP(S) protocol from an URL `http://sindresorhus.com` → `sindresorhus.com`. | ||
* | ||
* @default false | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('https://sindresorhus.com'); | ||
* //=> 'https://sindresorhus.com' | ||
* | ||
* normalizeUrl('sindresorhus.com', {stripProtocol: true}); | ||
* //=> 'sindresorhus.com' | ||
*/ | ||
readonly stripProtocol?: boolean; | ||
|
||
/** | ||
* Removes `www.` from the URL. | ||
* | ||
* @default true | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('http://www.sindresorhus.com'); | ||
* //=> 'http://sindresorhus.com' | ||
* | ||
* normalizeUrl('http://www.sindresorhus.com', {stripWWW: false}); | ||
* //=> 'http://www.sindresorhus.com' | ||
*/ | ||
readonly stripWWW?: boolean; | ||
|
||
/** | ||
* Removes query parameters that matches any of the provided strings or regexes. | ||
* | ||
* @default [/^utm_\w+/i] | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('www.sindresorhus.com?foo=bar&ref=test_ref', { | ||
* removeQueryParameters: ['ref'] | ||
* }); | ||
* //=> 'http://sindresorhus.com/?foo=bar' | ||
*/ | ||
readonly removeQueryParameters?: (RegExp | string)[]; | ||
|
||
/** | ||
* Removes trailing slash. | ||
* | ||
* **Note**: Trailing slash is always removed if the URL doesn't have a pathname. | ||
* | ||
* @default true | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('http://sindresorhus.com/redirect/'); | ||
* //=> 'http://sindresorhus.com/redirect' | ||
* | ||
* normalizeUrl('http://sindresorhus.com/redirect/', {removeTrailingSlash: false}); | ||
* //=> 'http://sindresorhus.com/redirect/' | ||
* | ||
* normalizeUrl('http://sindresorhus.com/', {removeTrailingSlash: false}); | ||
* //=> 'http://sindresorhus.com' | ||
*/ | ||
readonly removeTrailingSlash?: boolean; | ||
|
||
/** | ||
* Removes the default directory index file from path that matches any of the provided strings or regexes. | ||
* When `true`, the regex `/^index\.[a-z]+$/` is used. | ||
* | ||
* @default false | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('www.sindresorhus.com/foo/default.php', { | ||
* removeDirectoryIndex: [/^default\.[a-z]+$/] | ||
* }); | ||
* //=> 'http://sindresorhus.com/foo' | ||
*/ | ||
readonly removeDirectoryIndex?: (RegExp | string)[]; | ||
|
||
/** | ||
* Sorts the query parameters alphabetically by key. | ||
* | ||
* @default true | ||
* | ||
* @example | ||
* | ||
* normalizeUrl('www.sindresorhus.com?b=two&a=one&c=three', { | ||
* sortQueryParameters: false | ||
* }); | ||
* //=> 'http://sindresorhus.com/?b=two&a=one&c=three' | ||
*/ | ||
readonly sortQueryParameters?: boolean; | ||
} | ||
|
||
/** | ||
* [Normalize](https://en.wikipedia.org/wiki/URL_normalization) a URL. | ||
* | ||
* @param url - URL to normalize. | ||
*/ | ||
export default function normalizeUrl(url: string, options?: Options): string; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import {expectType} from 'tsd-check'; | ||
import normalizeUrl from '.'; | ||
|
||
expectType<string>(normalizeUrl('sindresorhus.com')); | ||
expectType<string>(normalizeUrl('HTTP://xn--xample-hva.com:80/?b=bar&a=foo')); | ||
|
||
normalizeUrl('//sindresorhus.com:80/', {defaultProtocol: 'https:'}); | ||
normalizeUrl('//sindresorhus.com:80/', {normalizeProtocol: false}); | ||
normalizeUrl('https://sindresorhus.com:80/', {forceHttp: true}); | ||
normalizeUrl('http://sindresorhus.com:80/', {forceHttps: true}); | ||
normalizeUrl('user:password@sindresorhus.com', {stripAuthentication: false}); | ||
normalizeUrl('sindresorhus.com/about.html#contact', {stripHash: true}); | ||
normalizeUrl('https://sindresorhus.com', {stripProtocol: true}); | ||
normalizeUrl('http://www.sindresorhus.com', {stripWWW: false}); | ||
normalizeUrl('www.sindresorhus.com?foo=bar&ref=test_ref', { | ||
removeQueryParameters: ['ref', /test/] | ||
}); | ||
normalizeUrl('http://sindresorhus.com/', {removeTrailingSlash: false}); | ||
normalizeUrl('www.sindresorhus.com/foo/default.php', { | ||
removeDirectoryIndex: [/^default\.[a-z]+$/, 'foo'] | ||
}); | ||
normalizeUrl('www.sindresorhus.com?b=two&a=one&c=three', { | ||
sortQueryParameters: false | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters