@social-embed/lib
Version:
URL detection and parsing for embed providers (YouTube, other OEmbed compatible providers),
2 lines (1 loc) • 4.53 kB
JavaScript
(function(r,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(r=typeof globalThis<"u"?globalThis:r||self,i(r.SocialEmbedLib={}))})(this,function(r){"use strict";const i=e=>{try{return!!new URL(e)}catch{return!1}},m=/^(?:(?:https?):)?(?:\/\/)?(?:www\.)?(?:youtube(?:-nocookie)?.com|youtu.be)(?:\/watch\?v)?[=/]([a-zA-Z0-9_-]{11})(?:\\?|=|&|$)/,y=e=>{var t;return e?((t=e.match(m))==null?void 0:t[1])??"":""},b=e=>`https://www.youtube.com/embed/${e}`,w={name:"YouTube",canParseUrl(e){return m.test(e)},getIdFromUrl(e){return y(e)},getEmbedUrlFromId(e){return b(e)}},l=/^(?:(?:https?):)?(?:\/\/)?(?:www\.)?(?:(?:dailymotion\.com(?:\/embed)?\/video)|dai\.ly)\/([a-zA-Z0-9]+)(?:_[\w_-]+)?(?:\?playlist=[a-zA-Z0-9]+)?$/,I=e=>{var t;return((t=e.match(l))==null?void 0:t[1])??""},F=e=>`https://www.dailymotion.com/embed/video/${e}`,v={name:"DailyMotion",canParseUrl(e){return l.test(e)},getIdFromUrl(e){return I(e)},getEmbedUrlFromId(e){return F(e)}},n=["track","album","playlist","artist","show","episode"],s=new RegExp(`^(?:(?:https?):)?(?:\\/\\/)?(?:embed\\.|open\\.)?spotify\\.com\\/(?:(${n.join("|")})\\/)([-\\w]{22})(?:\\?si=[_\\-\\w]{22})?`),a=new RegExp(`^spotify:(?:(${n.join("|")}):)([-\\w]{22})`);function P(e){const t=e.match(s)||e.match(a);if(!t)return["",""];const o=t[1]??"";return[t[2]??"",o]}function h(e,...t){const o=typeof t[0]=="string"?t[0]:"";return`https://open.spotify.com/embed/${n.includes(o)?o:"track"}/${e}`}const E={name:"Spotify",canParseUrl(e){return s.test(e)||a.test(e)},getIdFromUrl(e){return P(e)},getEmbedUrlFromId(e,...t){return h(e,...t)}},c=/(?:(?:https?):)?(?:\/\/)?(?:www\.|player\.)?vimeo\.com\/(?:channels\/(?:\w+\/)?|groups\/(?:[^/]*)\/videos\/|video\/|)(\d+)(?:|\/\?)/,p=e=>{var t;return((t=e.match(c))==null?void 0:t[1])??""},z=e=>`https://player.vimeo.com/video/${e}`,R={name:"Vimeo",canParseUrl(e){return c.test(e)},getIdFromUrl(e){return p(e)},getEmbedUrlFromId(e){return z(e)}},u=/^(?:(?:https?):)?(?:\/\/)?(?:www\.)?edpuzzle.com[=/]media\/([-\w]+)/,T=e=>{var t;if(e){if((e==null?void 0:e.length)>1e3)throw new Error("URL too long");return((t=e.match(u))==null?void 0:t[1])??""}return""},S=e=>`https://edpuzzle.com/embed/media/${e}`,L={name:"EdPuzzle",canParseUrl(e){return u.test(e)},getIdFromUrl(e){return T(e)},getEmbedUrlFromId(e){return S(e)}},g=/^(?:(?:https?):)?(?:\/\/)?(?:www|fast|support\.)?(?:wistia.com|wi.st)[=/](?:medias|embed)\/([-\w]+)/,$=e=>{var t;if(e){if(e.length>1e3)throw new Error("URL too long");return((t=e.match(g))==null?void 0:t[1])??""}return""},M=e=>`https://fast.wistia.net/embed/iframe/${e}`,Y={name:"Wistia",canParseUrl(e){return g.test(e)},getIdFromUrl(e){return $(e)},getEmbedUrlFromId(e){return M(e)}},U=/^(?:(?:https?):)?(?:\/\/)?(?:www\.)?loom.com[=/]share\/([-\w]+)/,A=e=>{var t;if(e){if(e.length>1e3)throw new Error("URL too long");return((t=e.match(U))==null?void 0:t[1])??""}return""},V=e=>`https://www.loom.com/embed/${e}`,D={name:"Loom",canParseUrl(e){return U.test(e)},getIdFromUrl(e){return A(e)},getEmbedUrlFromId(e){return V(e)}};function W(e){if(e)return f.findProviderByUrl(e)}function j(e){const t=W(e);if(!t)return"";const o=t.getIdFromUrl(e);if(Array.isArray(o)){const[d,...k]=o;return d?t.getEmbedUrlFromId(d,...k):""}return t.getEmbedUrlFromId(o)}class B{constructor(){this.providers=new Map}register(t){this.providers.set(t.name,t)}listProviders(){return Array.from(this.providers.values())}getProviderByName(t){return this.providers.get(t)}findProviderByUrl(t){for(const o of this.providers.values())if(o.canParseUrl(t))return o}}const _=[v,L,D,E,R,Y,w],f=new B;for(const e of _)f.register(e);r.DailyMotionProvider=v,r.EdPuzzleProvider=L,r.LoomProvider=D,r.SPOTIFY_TYPES=n,r.SpotifyProvider=E,r.VimeoProvider=R,r.WistiaProvider=Y,r.YouTubeProvider=w,r.convertUrlToEmbedUrl=j,r.dailyMotionUrlRegex=l,r.defaultProviders=_,r.defaultRegistry=f,r.edPuzzleUrlRegex=u,r.getDailyMotionEmbedFromId=F,r.getDailyMotionIdFromUrl=I,r.getEdPuzzleEmbedUrlFromId=S,r.getEdPuzzleIdFromUrl=T,r.getLoomEmbedUrlFromId=V,r.getLoomIdFromUrl=A,r.getProviderFromUrl=W,r.getSpotifyEmbedUrlFromIdAndType=h,r.getSpotifyIdAndTypeFromUrl=P,r.getVimeoEmbedUrlFromId=z,r.getVimeoIdFromUrl=p,r.getWistiaEmbedUrlFromId=M,r.getWistiaIdFromUrl=$,r.getYouTubeEmbedUrlFromId=b,r.getYouTubeIdFromUrl=y,r.isValidUrl=i,r.loomUrlRegex=U,r.spotifySymbolRegex=a,r.spotifyUrlRegex=s,r.vimeoUrlRegex=c,r.wistiaUrlRegex=g,r.youTubeUrlRegex=m,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});