@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
JavaScript
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 };