Skip to content

Commit 211322b

Browse files
mathieumgsindresorhus
authored andcommitted
Make stripHash option false by default and add stripAuth and stripProtocol options (#74)
1 parent 8fbf911 commit 211322b

File tree

3 files changed

+74
-6
lines changed

3 files changed

+74
-6
lines changed

index.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ module.exports = (urlString, opts) => {
1212
normalizeProtocol: true,
1313
forceHttp: false,
1414
forceHttps: false,
15-
stripHash: true,
15+
stripAuth: true,
16+
stripHash: false,
1617
stripWWW: true,
1718
removeQueryParameters: [/^utm_\w+/i],
1819
removeTrailingSlash: true,
@@ -57,6 +58,12 @@ module.exports = (urlString, opts) => {
5758
urlObj.protocol = 'https:';
5859
}
5960

61+
// Remove auth
62+
if (opts.stripAuth) {
63+
urlObj.username = '';
64+
urlObj.password = '';
65+
}
66+
6067
// Remove hash
6168
if (opts.stripHash) {
6269
urlObj.hash = '';
@@ -134,5 +141,10 @@ module.exports = (urlString, opts) => {
134141
urlString = urlString.replace(/^http:\/\//, '//');
135142
}
136143

144+
// Remove http/https
145+
if (opts.stripProtocol) {
146+
urlString = urlString.replace(/^(?:https?:)?\/\//, '');
147+
}
148+
137149
return urlString;
138150
};

readme.md

+33-3
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,49 @@ normalizeUrl('http://sindresorhus.com:80/', {forceHttps: true});
9191

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

94-
##### stripHash
94+
##### stripAuth
9595

9696
Type: `boolean`<br>
9797
Default: `true`
9898

99+
Strip the [authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) part of a URL.
100+
101+
```js
102+
normalizeUrl('user:[email protected]/about.html');
103+
//=> 'http://sindresorhus.com/about.html'
104+
105+
normalizeUrl('user:[email protected]/about.html', {stripAuth: false});
106+
//=> 'http://user:[email protected]/about.html'
107+
```
108+
109+
##### stripHash
110+
111+
Type: `boolean`<br>
112+
Default: `false`
113+
99114
Removes hash from the URL.
100115

101116
```js
102117
normalizeUrl('sindresorhus.com/about.html#contact');
118+
//=> 'http://sindresorhus.com/about.html#contact'
119+
120+
normalizeUrl('sindresorhus.com/about.html#contact', {stripHash: true});
103121
//=> 'http://sindresorhus.com/about.html'
122+
```
104123

105-
normalizeUrl('sindresorhus.com/about.html#contact', {stripHash: false});
106-
//=> 'http://sindresorhus.com/about.html#contact'
124+
##### stripProtocol
125+
126+
Type: `boolean`<br>
127+
Default: `false`
128+
129+
Removes HTTP(S) protocol from an URL `http://sindresorhus.com``sindresorhus.com`.
130+
131+
```js
132+
normalizeUrl('https://sindresorhus.com/about.html');
133+
//=> 'https://sindresorhus.com/about.html'
134+
135+
normalizeUrl('sindresorhus.com/about.html', {stripProtocol: true});
136+
//=> 'sindresorhus.com/about.html'
107137
```
108138

109139
##### stripWWW

test.js

+28-2
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,20 @@ test('main', t => {
3232
t.is(m('http://sindresorhus.com////foo////bar'), 'http://sindresorhus.com/foo/bar');
3333
t.is(m('//sindresorhus.com/', {normalizeProtocol: false}), '//sindresorhus.com');
3434
t.is(m('//sindresorhus.com:80/', {normalizeProtocol: false}), '//sindresorhus.com');
35-
t.is(m('http://sindresorhus.com/foo#bar'), 'http://sindresorhus.com/foo');
36-
t.is(m('http://sindresorhus.com/foo#bar', {stripHash: false}), 'http://sindresorhus.com/foo#bar');
35+
t.is(m('http://sindresorhus.com/foo#bar'), 'http://sindresorhus.com/foo#bar');
36+
t.is(m('http://sindresorhus.com/foo#bar', {stripHash: true}), 'http://sindresorhus.com/foo');
3737
t.is(m('http://sindresorhus.com/foo/bar/../baz'), 'http://sindresorhus.com/foo/baz');
3838
t.is(m('http://sindresorhus.com/foo/bar/./baz'), 'http://sindresorhus.com/foo/bar/baz');
3939
t.is(m('sindre://www.sorhus.com'), 'sindre://sorhus.com');
4040
t.is(m('sindre://www.sorhus.com/'), 'sindre://sorhus.com');
4141
t.is(m('sindre://www.sorhus.com/foo/bar'), 'sindre://sorhus.com/foo/bar');
4242
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');
43+
t.is(m('http://user:[email protected]'), 'http://sindresorhus.com');
44+
t.is(m('https://user:[email protected]'), 'https://sindresorhus.com');
45+
t.is(m('https://user:[email protected]/@user'), 'https://sindresorhus.com/@user');
46+
t.is(m('user:[email protected]'), 'http://sindresorhus.com');
47+
t.is(m('http://user:password@www.êxample.com'), 'http://xn--xample-hva.com');
48+
t.is(m('sindre://user:[email protected]'), 'sindre://sorhus.com');
4349
});
4450

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

57+
test('stripAuth option', t => {
58+
const opts = {stripAuth: false};
59+
t.is(m('http://user:[email protected]', opts), 'http://user:[email protected]');
60+
t.is(m('https://user:[email protected]', opts), 'https://user:[email protected]');
61+
t.is(m('https://user:[email protected]/@user', opts), 'https://user:[email protected]/@user');
62+
t.is(m('user:[email protected]', opts), 'http://user:[email protected]');
63+
t.is(m('http://user:password@www.êxample.com', opts), 'http://user:[email protected]');
64+
t.is(m('sindre://user:[email protected]', opts), 'sindre://user:[email protected]');
65+
});
66+
67+
test('stripProtocol option', t => {
68+
const opts = {stripProtocol: true};
69+
t.is(m('http://www.sindresorhus.com', opts), 'sindresorhus.com');
70+
t.is(m('http://sindresorhus.com', opts), 'sindresorhus.com');
71+
t.is(m('https://www.sindresorhus.com', opts), 'sindresorhus.com');
72+
t.is(m('//www.sindresorhus.com', opts), 'sindresorhus.com');
73+
t.is(m('sindre://user:[email protected]', opts), 'sindre://sorhus.com');
74+
t.is(m('sindre://www.sorhus.com', opts), 'sindre://sorhus.com');
75+
});
76+
5177
test('stripWWW option', t => {
5278
const opts = {stripWWW: false};
5379
t.is(m('http://www.sindresorhus.com', opts), 'http://www.sindresorhus.com');

0 commit comments

Comments
 (0)