UNPKG

@7sage/vidstack

Version:

UI component library for building high-quality, accessible video and audio experiences on the web.

67 lines (64 loc) 2.1 kB
import { isNull, isString, deferredPromise, isBoolean } from './vidstack-BGSTndAW.js'; import { isAudioSrc, isVideoSrc } from './vidstack-xMS8dnYq.js'; function appendParamsToURL(baseUrl, params) { const url = new URL(baseUrl); for (const key of Object.keys(params)) { url.searchParams.set(key, params[key] + ""); } return url.toString(); } function preconnect(url, rel = "preconnect") { const exists = document.querySelector(`link[href="${url}"]`); if (!isNull(exists)) return true; const link = document.createElement("link"); link.rel = rel; link.href = url; link.crossOrigin = "true"; document.head.append(link); return true; } const pendingRequests = {}; function loadScript(src) { if (pendingRequests[src]) return pendingRequests[src].promise; const promise = deferredPromise(), exists = document.querySelector(`script[src="${src}"]`); if (!isNull(exists)) { promise.resolve(); return promise.promise; } pendingRequests[src] = promise; const script = document.createElement("script"); script.src = src; script.onload = () => { promise.resolve(); delete pendingRequests[src]; }; script.onerror = () => { promise.reject(); delete pendingRequests[src]; }; setTimeout(() => document.head.append(script), 0); return promise.promise; } function getRequestCredentials(crossOrigin) { return crossOrigin === "use-credentials" ? "include" : isString(crossOrigin) ? "same-origin" : void 0; } function getDownloadFile({ title, src, download }) { const url = isBoolean(download) || download === "" ? src.src : isString(download) ? download : download?.url; if (!isValidFileDownload({ url, src, download })) return null; return { url, name: !isBoolean(download) && !isString(download) && download?.filename || title.toLowerCase() || "media" }; } function isValidFileDownload({ url, src, download }) { return isString(url) && (download && download !== true || isAudioSrc(src) || isVideoSrc(src)); } export { appendParamsToURL, getDownloadFile, getRequestCredentials, loadScript, preconnect };