1
0
Fork 1
mirror of https://codeberg.org/keyoxide/doipjs.git synced 2025-04-22 22:31:32 -06:00

Added support for m.youtube.com, youtube.com and youtu.be; Added support for additional query parameters; Added more unit tests;

This commit is contained in:
Daniel Levi 2025-03-04 16:38:48 +02:00
parent be7523333f
commit db22a6095a
No known key found for this signature in database
GPG key ID: D267DF29810DBDD5

View file

@ -24,7 +24,7 @@ limitations under the License.
import * as E from '../enums.js'
import { ServiceProvider } from '../serviceProvider.js'
export const reURI = /https:\/\/www\.youtube\.com\/watch\?v=[a-zA-Z0-9_-]{11}/
export const reURI = /^https:\/\/(?:(?:(?:www\.|m\.)?youtube\.com\/watch\?(?:(?!v=)[^&]+&)*v=)|(?:youtu\.be\/(?:watch\?(?:(?!v=)[^&]+&)*v=|)))?([a-zA-Z0-9_-]{11})(?:[&?].*)?$/
/**
* @function
@ -55,7 +55,7 @@ export function processURI (uri) {
fetcher: E.Fetcher.HTTP,
accessRestriction: E.ProofAccessRestriction.NOCORS,
data: {
url: `https://www.youtube.com/oembed?url=${match[0]}`,
url: `https://www.youtube.com/oembed?url=${encodeURIComponent(`https://www.youtube.com/watch?v=${match[1]}`)}`,
format: E.ProofFormat.JSON
}
},
@ -84,16 +84,127 @@ export const functions = {
}
export const tests = [
// Full URLs (valid)
{
uri: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
shouldMatch: true
},
{
uri: 'https://youtube.com/watch?v=dQw4w9WgXcQ',
shouldMatch: true
},
{
uri: 'https://m.youtube.com/watch?v=dQw4w9WgXcQ',
shouldMatch: true
},
// Invalid video ID (invalid)
{
uri: 'https://www.youtube.com/watch?v=invalid_video_id',
shouldMatch: false
},
{
uri: 'https://youtube.com/watch?v=invalid_video_id',
shouldMatch: false
},
{
uri: 'https://m.youtube.com/watch?v=invalid_video_id',
shouldMatch: false
},
{
uri: 'https://youtu.be/invalid_video_id',
shouldMatch: false
},
// Full URL with no `/watch` (invalid)
{
uri: 'https://www.youtube.com/dQw4w9WgXcQ',
shouldMatch: false
},
{
uri: 'https://youtube.com/dQw4w9WgXcQ',
shouldMatch: false
},
{
uri: 'https://m.youtube.com/dQw4w9WgXcQ',
shouldMatch: false
},
// Full URL with playlist (valid)
{
uri: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ&list=PLFPk5ONFpYvWsnAYJqm6Li4qtg367uUbv',
shouldMatch: true
},
{
uri: 'https://youtube.com/watch?v=dQw4w9WgXcQ&list=PLFPk5ONFpYvWsnAYJqm6Li4qtg367uUbv',
shouldMatch: true
},
{
uri: 'https://m.youtube.com/watch?v=dQw4w9WgXcQ&list=PLFPk5ONFpYvWsnAYJqm6Li4qtg367uUbv',
shouldMatch: true
},
{
uri: 'https://www.youtube.com/watch?list=PLFPk5ONFpYvWsnAYJqm6Li4qtg367uUbv&v=dQw4w9WgXcQ',
shouldMatch: true
},
{
uri: 'https://youtube.com/watch?list=PLFPk5ONFpYvWsnAYJqm6Li4qtg367uUbv&v=dQw4w9WgXcQ',
shouldMatch: true
},
{
uri: 'https://m.youtube.com/watch?list=PLFPk5ONFpYvWsnAYJqm6Li4qtg367uUbv&v=dQw4w9WgXcQ',
shouldMatch: true
},
// Short URL (valid)
{
uri: 'https://youtu.be/dQw4w9WgXcQ',
shouldMatch: true
},
// Short URL with `/watch` (valid)
{
uri: 'https://youtu.be/watch?v=dQw4w9WgXcQ',
shouldMatch: true
},
{
uri: 'https://youtu.be/watch?v=dQw4w9WgXcQ&list=PLFPk5ONFpYvWsnAYJqm6Li4qtg367uUbv',
shouldMatch: true
},
{
uri: 'https://youtu.be/watch?list=PLFPk5ONFpYvWsnAYJqm6Li4qtg367uUbv&v=dQw4w9WgXcQ',
shouldMatch: true
},
// Base URLs (invalid)
{
uri: 'https://youtu.be/',
shouldMatch: false
},
{
uri: 'https://www.youtube.com',
shouldMatch: false
},
{
uri: 'https://youtube.com',
shouldMatch: false
},
{
uri: 'https://m.youtube.com',
shouldMatch: false
},
// Empty video ID (invalid)
{
uri: 'https://www.youtube.com/watch?v=',
shouldMatch: false
},
{
uri: 'https://youtube.com/watch?v=',
shouldMatch: false
},
{
uri: 'https://m.youtube.com/watch?v=',
shouldMatch: false
}
]