Skip to content

Commit b35bdad

Browse files
fix: trim id's passed to the url-utils (#1073)
* fix invalid getURLVideoID test #CopyPaste * trim id's passed to url-utils
1 parent 21bc728 commit b35bdad

File tree

2 files changed

+30
-20
lines changed

2 files changed

+30
-20
lines changed

lib/url-utils.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@ const validQueryDomains = new Set([
2424
]);
2525
const validPathDomains = /^https?:\/\/(youtu\.be\/|(www\.)?youtube\.com\/(embed|v|shorts)\/)/;
2626
exports.getURLVideoID = link => {
27-
const parsed = new URL(link);
27+
const parsed = new URL(link.trim());
2828
let id = parsed.searchParams.get('v');
29-
if (validPathDomains.test(link) && !id) {
29+
if (validPathDomains.test(link.trim()) && !id) {
3030
const paths = parsed.pathname.split('/');
3131
id = parsed.host === 'youtu.be' ? paths[1] : paths[2];
3232
} else if (parsed.hostname && !validQueryDomains.has(parsed.hostname)) {
3333
throw Error('Not a YouTube domain');
3434
}
3535
if (!id) {
36-
throw Error(`No video id found: ${link}`);
36+
throw Error(`No video id found: "${link}"`);
3737
}
3838
id = id.substring(0, 11);
3939
if (!exports.validateID(id)) {
@@ -57,7 +57,7 @@ const urlRegex = /^https?:\/\//;
5757
exports.getVideoID = str => {
5858
if (exports.validateID(str)) {
5959
return str;
60-
} else if (urlRegex.test(str)) {
60+
} else if (urlRegex.test(str.trim())) {
6161
return exports.getURLVideoID(str);
6262
} else {
6363
throw Error(`No video id found: ${str}`);
@@ -72,7 +72,7 @@ exports.getVideoID = str => {
7272
* @return {boolean}
7373
*/
7474
const idRegex = /^[a-zA-Z0-9-_]{11}$/;
75-
exports.validateID = id => idRegex.test(id);
75+
exports.validateID = id => idRegex.test(id.trim());
7676

7777

7878
/**

test/url-utils-test.js

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,43 @@ describe('getURLVideoID()', () => {
99

1010
it('Retrives the video ID from the url', () => {
1111
let id;
12-
id = getVideoID('http://www.youtube.com/watch?v=RAW_VIDEOID');
12+
id = getURLVideoID('http://www.youtube.com/watch?v=RAW_VIDEOID');
1313
assert.strictEqual(id, 'RAW_VIDEOID');
14-
id = getVideoID('http://youtu.be/RAW_VIDEOID');
14+
id = getURLVideoID('http://youtu.be/RAW_VIDEOID');
1515
assert.strictEqual(id, 'RAW_VIDEOID');
16-
id = getVideoID('http://youtube.com/v/RAW_VIDEOID');
16+
id = getURLVideoID('http://youtube.com/v/RAW_VIDEOID');
1717
assert.strictEqual(id, 'RAW_VIDEOID');
18-
id = getVideoID('http://youtube.com/embed/RAW_VIDEOID');
18+
id = getURLVideoID('http://youtube.com/embed/RAW_VIDEOID');
1919
assert.strictEqual(id, 'RAW_VIDEOID');
20-
id = getVideoID('http://youtube.com/shorts/RAW_VIDEOID');
20+
id = getURLVideoID('http://youtube.com/shorts/RAW_VIDEOID');
2121
assert.strictEqual(id, 'RAW_VIDEOID');
22-
id = getVideoID('http://youtube.com/v/RAW_VIDEOID/FakeVideoID');
22+
id = getURLVideoID('http://youtube.com/v/RAW_VIDEOID/FakeVideoID');
2323
assert.strictEqual(id, 'RAW_VIDEOID');
24-
id = getVideoID('https://music.youtube.com/watch?v=RAW_VIDEOID&list=RDAMVMmtLgabce8KQ');
24+
id = getURLVideoID('https://music.youtube.com/watch?v=RAW_VIDEOID&list=RDAMVMmtLgabce8KQ');
2525
assert.strictEqual(id, 'RAW_VIDEOID');
26-
id = getVideoID('https://gaming.youtube.com/watch?v=RAW_VIDEOID');
26+
id = getURLVideoID('https://gaming.youtube.com/watch?v=RAW_VIDEOID');
2727
assert.strictEqual(id, 'RAW_VIDEOID');
2828
assert.throws(() => {
29-
getVideoID('https://any.youtube.com/watch?v=RAW_VIDEOID');
29+
getURLVideoID('https://any.youtube.com/watch?v=RAW_VIDEOID');
3030
}, /Not a YouTube domain/);
3131
assert.throws(() => {
32-
getVideoID('https://www.twitch.tv/user/v/1234');
32+
getURLVideoID('https://www.twitch.tv/user/v/1234');
3333
}, /Not a YouTube domain/);
3434
assert.throws(() => {
35-
getVideoID('www.youtube.com');
36-
}, /No video id found: \S+/);
35+
getURLVideoID('www.youtube.com');
36+
}, /Invalid URL/);
3737
assert.throws(() => {
38-
getVideoID('http://www.youtube.com/playlist?list=1337');
39-
}, /No video id found: \S+/);
38+
getURLVideoID('http://www.youtube.com/playlist?list=1337');
39+
}, /No video id found: "\S+"/);
4040
assert.throws(() => {
41-
getVideoID('http://www.youtube.com/watch?v=asdf$%^ddf-');
41+
getURLVideoID('http://www.youtube.com/watch?v=asdf$%^ddf-');
4242
}, /Video id \([^)]+\) does not match expected format/);
4343
});
44+
45+
it('Ignores surrounding whitespaces', () => {
46+
let id = getURLVideoID('\n\t http://www.youtube.com/watch?v=RAW_VIDEOID ');
47+
assert.strictEqual(id, 'RAW_VIDEOID');
48+
});
4449
});
4550

4651

@@ -78,6 +83,11 @@ describe('getVideoID()', () => {
7883
getVideoID('http://www.youtube.com/playlist?list=1337');
7984
}, /No video id found: \S+/);
8085
});
86+
87+
it('Ignores surrounding whitespaces', () => {
88+
let id = getVideoID('\n\t http://www.youtube.com/watch?v=RAW_VIDEOID ');
89+
assert.strictEqual(id, 'RAW_VIDEOID');
90+
});
8191
});
8292

8393

0 commit comments

Comments
 (0)