Skip to content

Commit

Permalink
Merge e969780 into 8fbf911
Browse files Browse the repository at this point in the history
  • Loading branch information
mathieumg committed Nov 5, 2018
2 parents 8fbf911 + e969780 commit ab50c1a
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 6 deletions.
14 changes: 13 additions & 1 deletion index.js
Expand Up @@ -12,7 +12,8 @@ module.exports = (urlString, opts) => {
normalizeProtocol: true,
forceHttp: false,
forceHttps: false,
stripHash: true,
stripAuth: true,
stripHash: false,
stripWWW: true,
removeQueryParameters: [/^utm_\w+/i],
removeTrailingSlash: true,
Expand Down Expand Up @@ -57,6 +58,12 @@ module.exports = (urlString, opts) => {
urlObj.protocol = 'https:';
}

// Remove auth
if (opts.stripAuth) {
urlObj.username = '';
urlObj.password = '';
}

// Remove hash
if (opts.stripHash) {
urlObj.hash = '';
Expand Down Expand Up @@ -134,5 +141,10 @@ module.exports = (urlString, opts) => {
urlString = urlString.replace(/^http:\/\//, '//');
}

// Remove http/https
if (opts.stripProtocol) {
urlString = urlString.replace(/^(?:https?:)?\/\//, '');
}

return urlString;
};
36 changes: 33 additions & 3 deletions readme.md
Expand Up @@ -91,19 +91,49 @@ normalizeUrl('http://sindresorhus.com:80/', {forceHttps: true});

This option can't be used with the `forceHttp` option at the same time.

##### stripHash
##### stripAuth

Type: `boolean`<br>
Default: `true`

Strip the [authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) part of a URL.

```js
normalizeUrl('user:password@sindresorhus.com/about.html');
//=> 'http://sindresorhus.com/about.html'

normalizeUrl('user:password@sindresorhus.com/about.html', {stripAuth: false});
//=> 'http://user:password@sindresorhus.com/about.html'
```

##### stripHash

Type: `boolean`<br>
Default: `false`

Removes hash from the URL.

```js
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'
```

normalizeUrl('sindresorhus.com/about.html#contact', {stripHash: false});
//=> 'http://sindresorhus.com/about.html#contact'
##### stripProtocol

Type: `boolean`<br>
Default: `false`

Removes HTTP(S) protocol from an URL `http://sindresorhus.com``sindresorhus.com`.

```js
normalizeUrl('https://sindresorhus.com/about.html');
//=> 'https://sindresorhus.com/about.html'

normalizeUrl('sindresorhus.com/about.html', {stripProtocol: true});
//=> 'sindresorhus.com/about.html'
```

##### stripWWW
Expand Down
30 changes: 28 additions & 2 deletions test.js
Expand Up @@ -32,14 +32,20 @@ test('main', t => {
t.is(m('http://sindresorhus.com////foo////bar'), 'http://sindresorhus.com/foo/bar');
t.is(m('//sindresorhus.com/', {normalizeProtocol: false}), '//sindresorhus.com');
t.is(m('//sindresorhus.com:80/', {normalizeProtocol: false}), '//sindresorhus.com');
t.is(m('http://sindresorhus.com/foo#bar'), 'http://sindresorhus.com/foo');
t.is(m('http://sindresorhus.com/foo#bar', {stripHash: false}), 'http://sindresorhus.com/foo#bar');
t.is(m('http://sindresorhus.com/foo#bar'), 'http://sindresorhus.com/foo#bar');
t.is(m('http://sindresorhus.com/foo#bar', {stripHash: true}), 'http://sindresorhus.com/foo');
t.is(m('http://sindresorhus.com/foo/bar/../baz'), 'http://sindresorhus.com/foo/baz');
t.is(m('http://sindresorhus.com/foo/bar/./baz'), 'http://sindresorhus.com/foo/bar/baz');
t.is(m('sindre://www.sorhus.com'), 'sindre://sorhus.com');
t.is(m('sindre://www.sorhus.com/'), 'sindre://sorhus.com');
t.is(m('sindre://www.sorhus.com/foo/bar'), 'sindre://sorhus.com/foo/bar');
t.is(m('https://i.vimeocdn.com/filter/overlay?src0=https://i.vimeocdn.com/video/598160082_1280x720.jpg&src1=https://f.vimeocdn.com/images_v6/share/play_icon_overlay.png'), 'https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F598160082_1280x720.jpg&src1=https%3A%2F%2Ff.vimeocdn.com%2Fimages_v6%2Fshare%2Fplay_icon_overlay.png');
t.is(m('http://user:password@www.sindresorhus.com'), 'http://sindresorhus.com');
t.is(m('https://user:password@www.sindresorhus.com'), 'https://sindresorhus.com');
t.is(m('https://user:password@www.sindresorhus.com/@user'), 'https://sindresorhus.com/@user');
t.is(m('user:password@sindresorhus.com'), 'http://sindresorhus.com');
t.is(m('http://user:password@www.êxample.com'), 'http://xn--xample-hva.com');
t.is(m('sindre://user:password@www.sorhus.com'), 'sindre://sorhus.com');
});

test('backwards compatibility', t => {
Expand All @@ -48,6 +54,26 @@ test('backwards compatibility', t => {
t.is(m('http://sindresorhus.com', {normalizeHttp: true}), 'https://sindresorhus.com');
});

test('stripAuth option', t => {
const opts = {stripAuth: false};
t.is(m('http://user:password@www.sindresorhus.com', opts), 'http://user:password@sindresorhus.com');
t.is(m('https://user:password@www.sindresorhus.com', opts), 'https://user:password@sindresorhus.com');
t.is(m('https://user:password@www.sindresorhus.com/@user', opts), 'https://user:password@sindresorhus.com/@user');
t.is(m('user:password@sindresorhus.com', opts), 'http://user:password@sindresorhus.com');
t.is(m('http://user:password@www.êxample.com', opts), 'http://user:password@xn--xample-hva.com');
t.is(m('sindre://user:password@www.sorhus.com', opts), 'sindre://user:password@sorhus.com');
});

test('stripProtocol option', t => {
const opts = {stripProtocol: true};
t.is(m('http://www.sindresorhus.com', opts), 'sindresorhus.com');
t.is(m('http://sindresorhus.com', opts), 'sindresorhus.com');
t.is(m('https://www.sindresorhus.com', opts), 'sindresorhus.com');
t.is(m('//www.sindresorhus.com', opts), 'sindresorhus.com');
t.is(m('sindre://user:password@www.sorhus.com', opts), 'sindre://sorhus.com');
t.is(m('sindre://www.sorhus.com', opts), 'sindre://sorhus.com');
});

test('stripWWW option', t => {
const opts = {stripWWW: false};
t.is(m('http://www.sindresorhus.com', opts), 'http://www.sindresorhus.com');
Expand Down

0 comments on commit ab50c1a

Please sign in to comment.