{"version":3,"file":"js-video-url-parser-CevdiXB2.js","sources":["../../node_modules/js-video-url-parser/dist/jsVideoUrlParser.js"],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.urlParser = factory());\n}(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n var getQueryParams = function getQueryParams(qs) {\n if (typeof qs !== 'string') {\n return {};\n }\n\n qs = qs.split('+').join(' ');\n var params = {};\n var match = qs.match(/(?:[?](?:[^=]+)=(?:[^&#]*)(?:[&](?:[^=]+)=(?:[^&#]*))*(?:[#].*)?)|(?:[#].*)/);\n var split;\n\n if (match === null) {\n return {};\n }\n\n split = match[0].substr(1).split(/[&#=]/);\n\n for (var i = 0; i < split.length; i += 2) {\n params[decodeURIComponent(split[i])] = decodeURIComponent(split[i + 1] || '');\n }\n\n return params;\n };\n\n var combineParams = function combineParams(params, hasParams) {\n if (_typeof(params) !== 'object') {\n return '';\n }\n\n var combined = '';\n var i = 0;\n var keys = Object.keys(params);\n\n if (keys.length === 0) {\n return '';\n } //always have parameters in the same order\n\n\n keys.sort();\n\n if (!hasParams) {\n combined += '?' + keys[0] + '=' + params[keys[0]];\n i += 1;\n }\n\n for (; i < keys.length; i += 1) {\n combined += '&' + keys[i] + '=' + params[keys[i]];\n }\n\n return combined;\n }; //parses strings like 1h30m20s to seconds\n\n\n function getLetterTime(timeString) {\n var totalSeconds = 0;\n var timeValues = {\n 's': 1,\n 'm': 1 * 60,\n 'h': 1 * 60 * 60,\n 'd': 1 * 60 * 60 * 24,\n 'w': 1 * 60 * 60 * 24 * 7\n };\n var timePairs; //expand to \"1 h 30 m 20 s\" and split\n\n timeString = timeString.replace(/([smhdw])/g, ' $1 ').trim();\n timePairs = timeString.split(' ');\n\n for (var i = 0; i < timePairs.length; i += 2) {\n totalSeconds += parseInt(timePairs[i], 10) * timeValues[timePairs[i + 1] || 's'];\n }\n\n return totalSeconds;\n } //parses strings like 1:30:20 to seconds\n\n\n function getColonTime(timeString) {\n var totalSeconds = 0;\n var timeValues = [1, 1 * 60, 1 * 60 * 60, 1 * 60 * 60 * 24, 1 * 60 * 60 * 24 * 7];\n var timePairs = timeString.split(':');\n\n for (var i = 0; i < timePairs.length; i++) {\n totalSeconds += parseInt(timePairs[i], 10) * timeValues[timePairs.length - i - 1];\n }\n\n return totalSeconds;\n }\n\n var getTime = function getTime(timeString) {\n if (typeof timeString === 'undefined') {\n return 0;\n }\n\n if (timeString.match(/^(\\d+[smhdw]?)+$/)) {\n return getLetterTime(timeString);\n }\n\n if (timeString.match(/^(\\d+:?)+$/)) {\n return getColonTime(timeString);\n }\n\n return 0;\n };\n\n var util = {\n getQueryParams: getQueryParams,\n combineParams: combineParams,\n getTime: getTime\n };\n\n var getQueryParams$1 = util.getQueryParams;\n\n function UrlParser() {\n for (var _i = 0, _arr = ['parseProvider', 'parse', 'bind', 'create']; _i < _arr.length; _i++) {\n var key = _arr[_i];\n this[key] = this[key].bind(this);\n }\n\n this.plugins = {};\n }\n\n var urlParser = UrlParser;\n\n UrlParser.prototype.parseProvider = function (url) {\n var match = url.match(/(?:(?:https?:)?\\/\\/)?(?:[^.]+\\.)?(\\w+)\\./i);\n return match ? match[1] : undefined;\n };\n\n UrlParser.prototype.parse = function (url) {\n if (typeof url === 'undefined') {\n return undefined;\n }\n\n var provider = this.parseProvider(url);\n var result;\n var plugin = this.plugins[provider];\n\n if (!provider || !plugin || !plugin.parse) {\n return undefined;\n }\n\n result = plugin.parse.call(plugin, url, getQueryParams$1(url));\n\n if (result) {\n result = removeEmptyParameters(result);\n result.provider = plugin.provider;\n }\n\n return result;\n };\n\n UrlParser.prototype.bind = function (plugin) {\n this.plugins[plugin.provider] = plugin;\n\n if (plugin.alternatives) {\n for (var i = 0; i < plugin.alternatives.length; i += 1) {\n this.plugins[plugin.alternatives[i]] = plugin;\n }\n }\n };\n\n UrlParser.prototype.create = function (op) {\n if (_typeof(op) !== 'object' || _typeof(op.videoInfo) !== 'object') {\n return undefined;\n }\n\n var vi = op.videoInfo;\n var params = op.params;\n var plugin = this.plugins[vi.provider];\n params = params === 'internal' ? vi.params : params || {};\n\n if (plugin) {\n op.format = op.format || plugin.defaultFormat; // eslint-disable-next-line no-prototype-builtins\n\n if (plugin.formats.hasOwnProperty(op.format)) {\n return plugin.formats[op.format].apply(plugin, [vi, Object.assign({}, params)]);\n }\n }\n\n return undefined;\n };\n\n function removeEmptyParameters(result) {\n if (result.params && Object.keys(result.params).length === 0) {\n delete result.params;\n }\n\n return result;\n }\n\n var parser = new urlParser();\n var base = parser;\n\n function Allocine() {\n this.provider = 'allocine';\n this.alternatives = [];\n this.defaultFormat = 'embed';\n this.formats = {\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n Allocine.prototype.parseUrl = function (url) {\n var match = url.match(/(?:\\/video\\/player_gen_cmedia=)([A-Za-z0-9]+)/i);\n return match ? match[1] : undefined;\n };\n\n Allocine.prototype.parse = function (url) {\n var result = {\n mediaType: this.mediaTypes.VIDEO,\n id: this.parseUrl(url)\n };\n return result.id ? result : undefined;\n };\n\n Allocine.prototype.createEmbedUrl = function (vi) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n return 'https://player.allocine.fr/' + vi.id + '.html';\n };\n\n base.bind(new Allocine());\n\n var combineParams$1 = util.combineParams;\n\n function CanalPlus() {\n this.provider = 'canalplus';\n this.defaultFormat = 'embed';\n this.formats = {\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n CanalPlus.prototype.parseParameters = function (params) {\n delete params.vid;\n return params;\n };\n\n CanalPlus.prototype.parse = function (url, params) {\n var _this = this;\n\n var result = {\n mediaType: this.mediaTypes.VIDEO,\n id: params.vid\n };\n result.params = _this.parseParameters(params);\n\n if (!result.id) {\n return undefined;\n }\n\n return result;\n };\n\n CanalPlus.prototype.createEmbedUrl = function (vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = 'http://player.canalplus.fr/embed/';\n params.vid = vi.id;\n url += combineParams$1(params);\n return url;\n };\n\n base.bind(new CanalPlus());\n\n var combineParams$2 = util.combineParams;\n\n function Coub() {\n this.provider = 'coub';\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n Coub.prototype.parseUrl = function (url) {\n var match = url.match(/(?:embed|view)\\/([a-zA-Z\\d]+)/i);\n return match ? match[1] : undefined;\n };\n\n Coub.prototype.parse = function (url, params) {\n var result = {\n mediaType: this.mediaTypes.VIDEO,\n params: params,\n id: this.parseUrl(url)\n };\n\n if (!result.id) {\n return undefined;\n }\n\n return result;\n };\n\n Coub.prototype.createUrl = function (baseUrl, vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = baseUrl + vi.id;\n url += combineParams$2(params);\n return url;\n };\n\n Coub.prototype.createLongUrl = function (vi, params) {\n return this.createUrl('https://coub.com/view/', vi, params);\n };\n\n Coub.prototype.createEmbedUrl = function (vi, params) {\n return this.createUrl('//coub.com/embed/', vi, params);\n };\n\n base.bind(new Coub());\n\n var combineParams$3 = util.combineParams,\n getTime$1 = util.getTime;\n\n function Dailymotion() {\n this.provider = 'dailymotion';\n this.alternatives = ['dai'];\n this.defaultFormat = 'long';\n this.formats = {\n \"short\": this.createShortUrl,\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl,\n image: this.createImageUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n Dailymotion.prototype.parseParameters = function (params) {\n return this.parseTime(params);\n };\n\n Dailymotion.prototype.parseTime = function (params) {\n if (params.start) {\n params.start = getTime$1(params.start);\n }\n\n return params;\n };\n\n Dailymotion.prototype.parseUrl = function (url) {\n var match = url.match(/(?:\\/video|ly)\\/([A-Za-z0-9]+)/i);\n return match ? match[1] : undefined;\n };\n\n Dailymotion.prototype.parse = function (url, params) {\n var _this = this;\n\n var result = {\n mediaType: this.mediaTypes.VIDEO,\n params: _this.parseParameters(params),\n id: _this.parseUrl(url)\n };\n return result.id ? result : undefined;\n };\n\n Dailymotion.prototype.createUrl = function (base, vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n return base + vi.id + combineParams$3(params);\n };\n\n Dailymotion.prototype.createShortUrl = function (vi, params) {\n return this.createUrl('https://dai.ly/', vi, params);\n };\n\n Dailymotion.prototype.createLongUrl = function (vi, params) {\n return this.createUrl('https://dailymotion.com/video/', vi, params);\n };\n\n Dailymotion.prototype.createEmbedUrl = function (vi, params) {\n return this.createUrl('https://www.dailymotion.com/embed/video/', vi, params);\n };\n\n Dailymotion.prototype.createImageUrl = function (vi, params) {\n delete params.start;\n return this.createUrl('https://www.dailymotion.com/thumbnail/video/', vi, params);\n };\n\n base.bind(new Dailymotion());\n\n var combineParams$4 = util.combineParams;\n\n function Loom() {\n this.provider = 'loom';\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n Loom.prototype.parseUrl = function (url) {\n var match = url.match(/(?:share|embed)\\/([a-zA-Z\\d]+)/i);\n return match ? match[1] : undefined;\n };\n\n Loom.prototype.parse = function (url, params) {\n var result = {\n mediaType: this.mediaTypes.VIDEO,\n params: params,\n id: this.parseUrl(url)\n };\n return result.id ? result : undefined;\n };\n\n Loom.prototype.createUrl = function (baseUrl, vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = baseUrl + vi.id;\n url += combineParams$4(params);\n return url;\n };\n\n Loom.prototype.createLongUrl = function (vi, params) {\n return this.createUrl('https://loom.com/share/', vi, params);\n };\n\n Loom.prototype.createEmbedUrl = function (vi, params) {\n return this.createUrl('//loom.com/embed/', vi, params);\n };\n\n base.bind(new Loom());\n\n var combineParams$5 = util.combineParams,\n getTime$2 = util.getTime;\n\n function Twitch() {\n this.provider = 'twitch';\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n VIDEO: 'video',\n STREAM: 'stream',\n CLIP: 'clip'\n };\n }\n\n Twitch.prototype.seperateId = function (id) {\n return {\n pre: id[0],\n id: id.substr(1)\n };\n };\n\n Twitch.prototype.parseChannel = function (result, params) {\n var channel = params.channel || params.utm_content || result.channel;\n delete params.utm_content;\n delete params.channel;\n return channel;\n };\n\n Twitch.prototype.parseUrl = function (url, result, params) {\n var match;\n match = url.match(/(clips\\.)?twitch\\.tv\\/(?:(?:videos\\/(\\d+))|(\\w+(?:-[\\w\\d-]+)?)(?:\\/clip\\/(\\w+))?)/i);\n\n if (match && match[2]) {\n //video\n result.id = 'v' + match[2];\n } else if (params.video) {\n //video embed\n result.id = params.video;\n delete params.video;\n } else if (params.clip) {\n //clips embed\n result.id = params.clip;\n result.isClip = true;\n delete params.clip;\n } else if (match && match[1] && match[3]) {\n //clips.twitch.tv/id\n result.id = match[3];\n result.isClip = true;\n } else if (match && match[3] && match[4]) {\n //twitch.tv/channel/clip/id\n result.channel = match[3];\n result.id = match[4];\n result.isClip = true;\n } else if (match && match[3]) {\n result.channel = match[3];\n }\n\n return result;\n };\n\n Twitch.prototype.parseMediaType = function (result) {\n var mediaType;\n\n if (result.id) {\n if (result.isClip) {\n mediaType = this.mediaTypes.CLIP;\n delete result.isClip;\n } else {\n mediaType = this.mediaTypes.VIDEO;\n }\n } else if (result.channel) {\n mediaType = this.mediaTypes.STREAM;\n }\n\n return mediaType;\n };\n\n Twitch.prototype.parseParameters = function (params) {\n if (params.t) {\n params.start = getTime$2(params.t);\n delete params.t;\n }\n\n return params;\n };\n\n Twitch.prototype.parse = function (url, params) {\n var _this = this;\n\n var result = {};\n result = _this.parseUrl(url, result, params);\n result.channel = _this.parseChannel(result, params);\n result.mediaType = _this.parseMediaType(result);\n result.params = _this.parseParameters(params);\n return result.channel || result.id ? result : undefined;\n };\n\n Twitch.prototype.createLongUrl = function (vi, params) {\n var url = '';\n\n if (vi.mediaType === this.mediaTypes.STREAM && vi.channel) {\n url = 'https://twitch.tv/' + vi.channel;\n } else if (vi.mediaType === this.mediaTypes.VIDEO && vi.id) {\n var sep = this.seperateId(vi.id);\n url = 'https://twitch.tv/videos/' + sep.id;\n\n if (params.start) {\n params.t = params.start + 's';\n delete params.start;\n }\n } else if (vi.mediaType === this.mediaTypes.CLIP && vi.id) {\n if (vi.channel) {\n url = 'https://www.twitch.tv/' + vi.channel + '/clip/' + vi.id;\n } else {\n url = 'https://clips.twitch.tv/' + vi.id;\n }\n } else {\n return undefined;\n }\n\n url += combineParams$5(params);\n return url;\n };\n\n Twitch.prototype.createEmbedUrl = function (vi, params) {\n var url = 'https://player.twitch.tv/';\n\n if (vi.mediaType === this.mediaTypes.STREAM && vi.channel) {\n params.channel = vi.channel;\n } else if (vi.mediaType === this.mediaTypes.VIDEO && vi.id) {\n params.video = vi.id;\n\n if (params.start) {\n params.t = params.start + 's';\n delete params.start;\n }\n } else if (vi.mediaType === this.mediaTypes.CLIP && vi.id) {\n url = 'https://clips.twitch.tv/embed';\n params.clip = vi.id;\n } else {\n return undefined;\n }\n\n url += combineParams$5(params);\n return url;\n };\n\n base.bind(new Twitch());\n\n var combineParams$6 = util.combineParams,\n getTime$3 = util.getTime;\n\n function Vimeo() {\n this.provider = 'vimeo';\n this.alternatives = ['vimeopro'];\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n Vimeo.prototype.parseUrl = function (url) {\n var match = url.match(/(?:\\/showcase\\/\\d+)?(?:\\/(?:channels\\/[\\w]+|(?:(?:album\\/\\d+|groups\\/[\\w]+)\\/)?videos?))?\\/(\\d+)/i);\n return match ? match[1] : undefined;\n };\n\n Vimeo.prototype.parseHash = function (url) {\n var match = url.match(/\\/\\d+\\/(\\w+)$/i);\n return match ? match[1] : undefined;\n };\n\n Vimeo.prototype.parseParameters = function (params) {\n if (params.t) {\n params.start = getTime$3(params.t);\n delete params.t;\n }\n\n if (params.h) {\n params.hash = params.h;\n delete params.h;\n }\n\n return params;\n };\n\n Vimeo.prototype.parse = function (url, params) {\n var result = {\n mediaType: this.mediaTypes.VIDEO,\n params: this.parseParameters(params),\n id: this.parseUrl(url)\n };\n var hash = this.parseHash(url, params);\n\n if (hash) {\n result.params.hash = hash;\n }\n\n return result.id ? result : undefined;\n };\n\n Vimeo.prototype.createUrl = function (baseUrl, vi, params, type) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = baseUrl + vi.id;\n var startTime = params.start;\n delete params.start;\n\n if (params.hash) {\n if (type === 'embed') {\n params.h = params.hash;\n } else if (type === 'long') {\n url += '/' + params.hash;\n }\n\n delete params.hash;\n }\n\n url += combineParams$6(params);\n\n if (startTime) {\n url += '#t=' + startTime;\n }\n\n return url;\n };\n\n Vimeo.prototype.createLongUrl = function (vi, params) {\n return this.createUrl('https://vimeo.com/', vi, params, 'long');\n };\n\n Vimeo.prototype.createEmbedUrl = function (vi, params) {\n return this.createUrl('//player.vimeo.com/video/', vi, params, 'embed');\n };\n\n base.bind(new Vimeo());\n\n var combineParams$7 = util.combineParams,\n getTime$4 = util.getTime;\n\n function Wistia() {\n this.provider = 'wistia';\n this.alternatives = [];\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl,\n embedjsonp: this.createEmbedJsonpUrl\n };\n this.mediaTypes = {\n VIDEO: 'video',\n EMBEDVIDEO: 'embedvideo'\n };\n }\n\n Wistia.prototype.parseUrl = function (url) {\n var match = url.match(/(?:(?:medias|iframe)\\/|wvideo=)([\\w-]+)/);\n return match ? match[1] : undefined;\n };\n\n Wistia.prototype.parseChannel = function (url) {\n var match = url.match(/(?:(?:https?:)?\\/\\/)?([^.]*)\\.wistia\\./);\n var channel = match ? match[1] : undefined;\n\n if (channel === 'fast' || channel === 'content') {\n return undefined;\n }\n\n return channel;\n };\n\n Wistia.prototype.parseParameters = function (params, result) {\n if (params.wtime) {\n params.start = getTime$4(params.wtime);\n delete params.wtime;\n }\n\n if (params.wvideo === result.id) {\n delete params.wvideo;\n }\n\n return params;\n };\n\n Wistia.prototype.parseMediaType = function (result) {\n if (result.id && result.channel) {\n return this.mediaTypes.VIDEO;\n } else if (result.id) {\n delete result.channel;\n return this.mediaTypes.EMBEDVIDEO;\n } else {\n return undefined;\n }\n };\n\n Wistia.prototype.parse = function (url, params) {\n var result = {\n id: this.parseUrl(url),\n channel: this.parseChannel(url)\n };\n result.params = this.parseParameters(params, result);\n result.mediaType = this.parseMediaType(result);\n\n if (!result.id) {\n return undefined;\n }\n\n return result;\n };\n\n Wistia.prototype.createUrl = function (vi, params, url) {\n if (params.start) {\n params.wtime = params.start;\n delete params.start;\n }\n\n url += combineParams$7(params);\n return url;\n };\n\n Wistia.prototype.createLongUrl = function (vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = 'https://' + vi.channel + '.wistia.com/medias/' + vi.id;\n return this.createUrl(vi, params, url);\n };\n\n Wistia.prototype.createEmbedUrl = function (vi, params) {\n if (!vi.id || !(vi.mediaType === this.mediaTypes.VIDEO || vi.mediaType === this.mediaTypes.EMBEDVIDEO)) {\n return undefined;\n }\n\n var url = 'https://fast.wistia.com/embed/iframe/' + vi.id;\n return this.createUrl(vi, params, url);\n };\n\n Wistia.prototype.createEmbedJsonpUrl = function (vi) {\n if (!vi.id || !(vi.mediaType === this.mediaTypes.VIDEO || vi.mediaType === this.mediaTypes.EMBEDVIDEO)) {\n return undefined;\n }\n\n return 'https://fast.wistia.com/embed/medias/' + vi.id + '.jsonp';\n };\n\n base.bind(new Wistia());\n\n var combineParams$8 = util.combineParams;\n\n function Youku() {\n this.provider = 'youku';\n this.defaultFormat = 'long';\n this.formats = {\n embed: this.createEmbedUrl,\n \"long\": this.createLongUrl,\n flash: this.createFlashUrl,\n \"static\": this.createStaticUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n Youku.prototype.parseUrl = function (url) {\n var match = url.match(/(?:(?:embed|sid)\\/|v_show\\/id_|VideoIDS=)([a-zA-Z0-9]+)/);\n return match ? match[1] : undefined;\n };\n\n Youku.prototype.parseParameters = function (params) {\n if (params.VideoIDS) {\n delete params.VideoIDS;\n }\n\n return params;\n };\n\n Youku.prototype.parse = function (url, params) {\n var _this = this;\n\n var result = {\n mediaType: this.mediaTypes.VIDEO,\n id: _this.parseUrl(url),\n params: _this.parseParameters(params)\n };\n\n if (!result.id) {\n return undefined;\n }\n\n return result;\n };\n\n Youku.prototype.createUrl = function (baseUrl, vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = baseUrl + vi.id;\n url += combineParams$8(params);\n return url;\n };\n\n Youku.prototype.createEmbedUrl = function (vi, params) {\n return this.createUrl('http://player.youku.com/embed/', vi, params);\n };\n\n Youku.prototype.createLongUrl = function (vi, params) {\n return this.createUrl('http://v.youku.com/v_show/id_', vi, params);\n };\n\n Youku.prototype.createStaticUrl = function (vi, params) {\n return this.createUrl('http://static.youku.com/v1.0.0638/v/swf/loader.swf?VideoIDS=', vi, params);\n };\n\n Youku.prototype.createFlashUrl = function (vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = 'http://player.youku.com/player.php/sid/' + vi.id + '/v.swf';\n url += combineParams$8(params);\n return url;\n };\n\n base.bind(new Youku());\n\n var combineParams$9 = util.combineParams,\n getTime$5 = util.getTime;\n\n function YouTube() {\n this.provider = 'youtube';\n this.alternatives = ['youtu', 'ytimg'];\n this.defaultFormat = 'long';\n this.formats = {\n \"short\": this.createShortUrl,\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl,\n shortImage: this.createShortImageUrl,\n longImage: this.createLongImageUrl\n };\n this.imageQualities = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n DEFAULT: 'default',\n HQDEFAULT: 'hqdefault',\n SDDEFAULT: 'sddefault',\n MQDEFAULT: 'mqdefault',\n MAXRESDEFAULT: 'maxresdefault'\n };\n this.defaultImageQuality = this.imageQualities.HQDEFAULT;\n this.mediaTypes = {\n VIDEO: 'video',\n PLAYLIST: 'playlist',\n SHARE: 'share',\n CHANNEL: 'channel'\n };\n }\n\n YouTube.prototype.parseVideoUrl = function (url) {\n var match = url.match(/(?:(?:v|vi|be|videos|embed)\\/(?!videoseries)|(?:v|ci)=)([\\w-]{11})/i);\n return match ? match[1] : undefined;\n };\n\n YouTube.prototype.parseChannelUrl = function (url) {\n // Match an opaque channel ID\n var match = url.match(/\\/channel\\/([\\w-]+)/);\n\n if (match) {\n return {\n id: match[1],\n mediaType: this.mediaTypes.CHANNEL\n };\n } // Match a vanity channel name or a user name. User urls are deprecated and\n // currently redirect to the channel of that same name.\n\n\n match = url.match(/\\/(?:c|user)\\/([\\w-]+)/);\n\n if (match) {\n return {\n name: match[1],\n mediaType: this.mediaTypes.CHANNEL\n };\n }\n };\n\n YouTube.prototype.parseParameters = function (params, result) {\n if (params.start || params.t) {\n params.start = getTime$5(params.start || params.t);\n delete params.t;\n }\n\n if (params.v === result.id) {\n delete params.v;\n }\n\n if (params.list === result.id) {\n delete params.list;\n }\n\n return params;\n };\n\n YouTube.prototype.parseMediaType = function (result) {\n if (result.params.list) {\n result.list = result.params.list;\n delete result.params.list;\n }\n\n if (result.id && !result.params.ci) {\n result.mediaType = this.mediaTypes.VIDEO;\n } else if (result.list) {\n delete result.id;\n result.mediaType = this.mediaTypes.PLAYLIST;\n } else if (result.params.ci) {\n delete result.params.ci;\n result.mediaType = this.mediaTypes.SHARE;\n } else {\n return undefined;\n }\n\n return result;\n };\n\n YouTube.prototype.parse = function (url, params) {\n var channelResult = this.parseChannelUrl(url);\n\n if (channelResult) {\n return channelResult;\n } else {\n var result = {\n params: params,\n id: this.parseVideoUrl(url)\n };\n result.params = this.parseParameters(params, result);\n result = this.parseMediaType(result);\n return result;\n }\n };\n\n YouTube.prototype.createShortUrl = function (vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = 'https://youtu.be/' + vi.id;\n\n if (params.start) {\n url += '#t=' + params.start;\n }\n\n return url;\n };\n\n YouTube.prototype.createLongUrl = function (vi, params) {\n var url = '';\n var startTime = params.start;\n delete params.start;\n\n if (vi.mediaType === this.mediaTypes.CHANNEL) {\n if (vi.id) {\n url += 'https://www.youtube.com/channel/' + vi.id;\n } else if (vi.name) {\n url += 'https://www.youtube.com/c/' + vi.name;\n } else {\n return undefined;\n }\n } else if (vi.mediaType === this.mediaTypes.PLAYLIST && vi.list) {\n params.feature = 'share';\n url += 'https://www.youtube.com/playlist';\n } else if (vi.mediaType === this.mediaTypes.VIDEO && vi.id) {\n params.v = vi.id;\n url += 'https://www.youtube.com/watch';\n } else if (vi.mediaType === this.mediaTypes.SHARE && vi.id) {\n params.ci = vi.id;\n url += 'https://www.youtube.com/shared';\n } else {\n return undefined;\n }\n\n if (vi.list) {\n params.list = vi.list;\n }\n\n url += combineParams$9(params);\n\n if (vi.mediaType !== this.mediaTypes.PLAYLIST && startTime) {\n url += '#t=' + startTime;\n }\n\n return url;\n };\n\n YouTube.prototype.createEmbedUrl = function (vi, params) {\n var url = 'https://www.youtube.com/embed';\n\n if (vi.mediaType === this.mediaTypes.PLAYLIST && vi.list) {\n params.listType = 'playlist';\n } else if (vi.mediaType === this.mediaTypes.VIDEO && vi.id) {\n url += '/' + vi.id; //loop hack\n\n if (params.loop === '1') {\n params.playlist = vi.id;\n }\n } else {\n return undefined;\n }\n\n if (vi.list) {\n params.list = vi.list;\n }\n\n url += combineParams$9(params);\n return url;\n };\n\n YouTube.prototype.createImageUrl = function (baseUrl, vi, params) {\n if (!vi.id || vi.mediaType !== this.mediaTypes.VIDEO) {\n return undefined;\n }\n\n var url = baseUrl + vi.id + '/';\n var quality = params.imageQuality || this.defaultImageQuality;\n return url + quality + '.jpg';\n };\n\n YouTube.prototype.createShortImageUrl = function (vi, params) {\n return this.createImageUrl('https://i.ytimg.com/vi/', vi, params);\n };\n\n YouTube.prototype.createLongImageUrl = function (vi, params) {\n return this.createImageUrl('https://img.youtube.com/vi/', vi, params);\n };\n\n base.bind(new YouTube());\n\n var combineParams$a = util.combineParams,\n getTime$6 = util.getTime;\n\n function SoundCloud() {\n this.provider = 'soundcloud';\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n TRACK: 'track',\n PLAYLIST: 'playlist',\n APITRACK: 'apitrack',\n APIPLAYLIST: 'apiplaylist'\n };\n }\n\n SoundCloud.prototype.parseUrl = function (url, result) {\n var match = url.match(/(?:m\\.)?soundcloud\\.com\\/(?:([\\w-]+)\\/(sets\\/)?)([\\w-]+)/i);\n\n if (!match) {\n return result;\n }\n\n result.channel = match[1];\n\n if (match[1] === 'playlists' || match[2]) {\n //playlist\n result.list = match[3];\n } else {\n //track\n result.id = match[3];\n }\n\n return result;\n };\n\n SoundCloud.prototype.parseParameters = function (params) {\n if (params.t) {\n params.start = getTime$6(params.t);\n delete params.t;\n }\n\n return params;\n };\n\n SoundCloud.prototype.parseMediaType = function (result) {\n if (result.id) {\n if (result.channel === 'tracks') {\n delete result.channel;\n delete result.params.url;\n result.mediaType = this.mediaTypes.APITRACK;\n } else {\n result.mediaType = this.mediaTypes.TRACK;\n }\n }\n\n if (result.list) {\n if (result.channel === 'playlists') {\n delete result.channel;\n delete result.params.url;\n result.mediaType = this.mediaTypes.APIPLAYLIST;\n } else {\n result.mediaType = this.mediaTypes.PLAYLIST;\n }\n }\n\n return result;\n };\n\n SoundCloud.prototype.parse = function (url, params) {\n var result = {};\n result = this.parseUrl(url, result);\n result.params = this.parseParameters(params);\n result = this.parseMediaType(result);\n\n if (!result.id && !result.list) {\n return undefined;\n }\n\n return result;\n };\n\n SoundCloud.prototype.createLongUrl = function (vi, params) {\n var url = '';\n var startTime = params.start;\n delete params.start;\n\n if (vi.mediaType === this.mediaTypes.TRACK && vi.id && vi.channel) {\n url = 'https://soundcloud.com/' + vi.channel + '/' + vi.id;\n } else if (vi.mediaType === this.mediaTypes.PLAYLIST && vi.list && vi.channel) {\n url = 'https://soundcloud.com/' + vi.channel + '/sets/' + vi.list;\n } else if (vi.mediaType === this.mediaTypes.APITRACK && vi.id) {\n url = 'https://api.soundcloud.com/tracks/' + vi.id;\n } else if (vi.mediaType === this.mediaTypes.APIPLAYLIST && vi.list) {\n url = 'https://api.soundcloud.com/playlists/' + vi.list;\n } else {\n return undefined;\n }\n\n url += combineParams$a(params);\n\n if (startTime) {\n url += '#t=' + startTime;\n }\n\n return url;\n };\n\n SoundCloud.prototype.createEmbedUrl = function (vi, params) {\n var url = 'https://w.soundcloud.com/player/';\n delete params.start;\n\n if (vi.mediaType === this.mediaTypes.APITRACK && vi.id) {\n params.url = 'https%3A//api.soundcloud.com/tracks/' + vi.id;\n } else if (vi.mediaType === this.mediaTypes.APIPLAYLIST && vi.list) {\n params.url = 'https%3A//api.soundcloud.com/playlists/' + vi.list;\n } else {\n return undefined;\n }\n\n url += combineParams$a(params);\n return url;\n };\n\n base.bind(new SoundCloud());\n\n var combineParams$b = util.combineParams;\n\n function TeacherTube() {\n this.provider = 'teachertube';\n this.alternatives = [];\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n VIDEO: 'video',\n AUDIO: 'audio',\n DOCUMENT: 'document',\n CHANNEL: 'channel',\n COLLECTION: 'collection',\n GROUP: 'group'\n };\n }\n\n TeacherTube.prototype.parse = function (url, params) {\n var result = {};\n result.list = this.parsePlaylist(params);\n result.params = params;\n var match = url.match(/\\/(audio|video|document|user\\/channel|collection|group)\\/(?:[\\w-]+-)?(\\w+)/);\n\n if (!match) {\n return undefined;\n }\n\n result.mediaType = this.parseMediaType(match[1]);\n result.id = match[2];\n return result;\n };\n\n TeacherTube.prototype.parsePlaylist = function (params) {\n if (params['playlist-id']) {\n var list = params['playlist-id'];\n delete params['playlist-id'];\n return list;\n }\n\n return undefined;\n };\n\n TeacherTube.prototype.parseMediaType = function (mediaTypeMatch) {\n switch (mediaTypeMatch) {\n case 'audio':\n return this.mediaTypes.AUDIO;\n\n case 'video':\n return this.mediaTypes.VIDEO;\n\n case 'document':\n return this.mediaTypes.DOCUMENT;\n\n case 'user/channel':\n return this.mediaTypes.CHANNEL;\n\n case 'collection':\n return this.mediaTypes.COLLECTION;\n\n case 'group':\n return this.mediaTypes.GROUP;\n }\n };\n\n TeacherTube.prototype.createLongUrl = function (vi, params) {\n if (!vi.id) {\n return undefined;\n }\n\n var url = 'https://www.teachertube.com/';\n\n if (vi.list) {\n params['playlist-id'] = vi.list;\n }\n\n if (vi.mediaType === this.mediaTypes.CHANNEL) {\n url += 'user/channel/';\n } else {\n url += vi.mediaType + '/';\n }\n\n url += vi.id;\n url += combineParams$b(params);\n return url;\n };\n\n TeacherTube.prototype.createEmbedUrl = function (vi, params) {\n if (!vi.id) {\n return undefined;\n }\n\n var url = 'https://www.teachertube.com/embed/';\n\n if (vi.mediaType === this.mediaTypes.VIDEO || vi.mediaType === this.mediaTypes.AUDIO) {\n url += vi.mediaType + '/' + vi.id;\n } else {\n return undefined;\n }\n\n url += combineParams$b(params);\n return url;\n };\n\n base.bind(new TeacherTube());\n\n var combineParams$c = util.combineParams;\n\n function TikTok() {\n this.provider = 'tiktok';\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n TikTok.prototype.parse = function (url, params) {\n var result = {\n params: params,\n mediaType: this.mediaTypes.VIDEO\n };\n var match = url.match(/@([^/]+)\\/video\\/(\\d{19})/);\n\n if (!match) {\n return;\n }\n\n result.channel = match[1];\n result.id = match[2];\n return result;\n };\n\n TikTok.prototype.createLongUrl = function (vi, params) {\n var url = '';\n\n if (vi.mediaType === this.mediaTypes.VIDEO && vi.id && vi.channel) {\n url += \"https://www.tiktok.com/@\".concat(vi.channel, \"/video/\").concat(vi.id);\n } else {\n return undefined;\n }\n\n url += combineParams$c(params);\n return url;\n };\n\n base.bind(new TikTok());\n\n var combineParams$d = util.combineParams;\n\n function Ted() {\n this.provider = 'ted';\n this.formats = {\n \"long\": this.createLongUrl,\n embed: this.createEmbedUrl\n };\n this.mediaTypes = {\n VIDEO: 'video',\n PLAYLIST: 'playlist'\n };\n }\n\n Ted.prototype.parseUrl = function (url, result) {\n var match = url.match(/\\/(talks|playlists\\/(\\d+))\\/([\\w-]+)/i);\n var channel = match ? match[1] : undefined;\n\n if (!channel) {\n return result;\n }\n\n result.channel = channel.split('/')[0];\n result.id = match[3];\n\n if (result.channel === 'playlists') {\n result.list = match[2];\n }\n\n return result;\n };\n\n Ted.prototype.parseMediaType = function (result) {\n if (result.id && result.channel === 'playlists') {\n delete result.channel;\n result.mediaType = this.mediaTypes.PLAYLIST;\n }\n\n if (result.id && result.channel === 'talks') {\n delete result.channel;\n result.mediaType = this.mediaTypes.VIDEO;\n }\n\n return result;\n };\n\n Ted.prototype.parse = function (url, params) {\n var result = {\n params: params\n };\n result = this.parseUrl(url, result);\n result = this.parseMediaType(result);\n\n if (!result.id) {\n return undefined;\n }\n\n return result;\n };\n\n Ted.prototype.createLongUrl = function (vi, params) {\n var url = '';\n\n if (vi.mediaType === this.mediaTypes.VIDEO && vi.id) {\n url += 'https://ted.com/talks/' + vi.id;\n } else if (vi.mediaType === this.mediaTypes.PLAYLIST && vi.id) {\n url += 'https://ted.com/playlists/' + vi.list + '/' + vi.id;\n } else {\n return undefined;\n }\n\n url += combineParams$d(params);\n return url;\n };\n\n Ted.prototype.createEmbedUrl = function (vi, params) {\n var url = 'https://embed.ted.com/';\n\n if (vi.mediaType === this.mediaTypes.PLAYLIST && vi.id) {\n url += 'playlists/' + vi.list + '/' + vi.id;\n } else if (vi.mediaType === this.mediaTypes.VIDEO && vi.id) {\n url += 'talks/' + vi.id;\n } else {\n return undefined;\n }\n\n url += combineParams$d(params);\n return url;\n };\n\n base.bind(new Ted());\n\n var combineParams$e = util.combineParams;\n\n function Facebook() {\n this.provider = 'facebook';\n this.alternatives = [];\n this.defaultFormat = 'long';\n this.formats = {\n \"long\": this.createLongUrl,\n watch: this.createWatchUrl\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n }\n\n Facebook.prototype.parse = function (url, params) {\n var result = {\n params: params,\n mediaType: this.mediaTypes.VIDEO\n };\n var match = url.match(/(?:\\/(\\d+))?\\/videos(?:\\/.*?)?\\/(\\d+)/i);\n\n if (match) {\n if (match[1]) {\n result.pageId = match[1];\n }\n\n result.id = match[2];\n }\n\n if (params.v && !result.id) {\n result.id = params.v;\n delete params.v;\n result.params = params;\n }\n\n if (!result.id) {\n return undefined;\n }\n\n return result;\n };\n\n Facebook.prototype.createWatchUrl = function (vi, params) {\n var url = 'https://facebook.com/watch/';\n\n if (vi.mediaType !== this.mediaTypes.VIDEO || !vi.id) {\n return undefined;\n }\n\n params = {\n v: vi.id\n };\n url += combineParams$e(params);\n return url;\n };\n\n Facebook.prototype.createLongUrl = function (vi, params) {\n var url = 'https://facebook.com/';\n\n if (vi.pageId) {\n url += vi.pageId;\n } else {\n return undefined;\n }\n\n if (vi.mediaType === this.mediaTypes.VIDEO && vi.id) {\n url += '/videos/' + vi.id;\n } else {\n return undefined;\n }\n\n url += combineParams$e(params);\n return url;\n };\n\n base.bind(new Facebook());\n\n var lib = base;\n\n return lib;\n\n})));\n"],"names":["exports","_typeof","obj","Symbol","iterator","constructor","prototype","getLetterTime","timeString","timePairs","totalSeconds","timeValues","s","m","h","d","w","replace","trim","split","i","length","parseInt","getColonTime","util","getQueryParams","qs","params","match","join","substr","decodeURIComponent","combineParams","hasParams","combined","keys","Object","sort","getTime","getQueryParams$1","UrlParser","_i","_arr","key","this","bind","plugins","urlParser","removeEmptyParameters","result","parseProvider","url","parse","provider","plugin","call","alternatives","create","op","videoInfo","vi","format","defaultFormat","formats","hasOwnProperty","apply","assign","base","Allocine","embed","createEmbedUrl","mediaTypes","VIDEO","parseUrl","mediaType","id","combineParams$1","CanalPlus","parseParameters","vid","_this","combineParams$2","Coub","long","createLongUrl","createUrl","baseUrl","combineParams$3","getTime$1","Dailymotion","short","createShortUrl","image","createImageUrl","parseTime","start","combineParams$4","Loom","combineParams$5","getTime$2","Twitch","STREAM","CLIP","seperateId","pre","parseChannel","channel","utm_content","video","clip","isClip","parseMediaType","t","combineParams$6","getTime$3","Vimeo","parseHash","hash","type","startTime","combineParams$7","getTime$4","Wistia","embedjsonp","createEmbedJsonpUrl","EMBEDVIDEO","wtime","wvideo","combineParams$8","Youku","flash","createFlashUrl","static","createStaticUrl","VideoIDS","combineParams$9","getTime$5","YouTube","shortImage","createShortImageUrl","longImage","createLongImageUrl","imageQualities","DEFAULT","HQDEFAULT","SDDEFAULT","MQDEFAULT","MAXRESDEFAULT","defaultImageQuality","PLAYLIST","SHARE","CHANNEL","parseVideoUrl","parseChannelUrl","name","v","list","ci","channelResult","feature","listType","loop","playlist","imageQuality","combineParams$a","getTime$6","SoundCloud","TRACK","APITRACK","APIPLAYLIST","combineParams$b","TeacherTube","AUDIO","DOCUMENT","COLLECTION","GROUP","parsePlaylist","mediaTypeMatch","combineParams$c","TikTok","concat","combineParams$d","Ted","combineParams$e","Facebook","watch","createWatchUrl","pageId","factory"],"mappings":"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","x_google_ignoreList":[0]}