vidstack
Version:
Build awesome media experiences on the web.
97 lines (94 loc) • 2.57 kB
JavaScript
import { isUndefined, isString, DOMEvent, isFunction } from 'maverick.js/std';
import { Q as coerceToError, R as loadScript } from '../../media-core.js';
class HLSLibLoader {
constructor(_lib, _context, _callback) {
this.Bh = _lib;
this.ph = _context;
this.jf = _callback;
this.Ch();
}
async Ch() {
const callbacks = {
onLoadStart: this.ge.bind(this),
onLoaded: this.ue.bind(this),
onLoadError: this.Dh.bind(this)
};
let ctor = await loadHLSScript(this.Bh, callbacks);
if (isUndefined(ctor) && !isString(this.Bh))
ctor = await importHLS(this.Bh, callbacks);
if (!ctor)
return null;
if (!ctor.isSupported()) {
const message = "[vidstack]: `hls.js` is not supported in this environment";
this.ph.player.dispatchEvent(new DOMEvent("hls-unsupported"));
this.ph.delegate.p("error", { detail: { message, code: 4 } });
return null;
}
return ctor;
}
ge() {
this.ph.player.dispatchEvent(new DOMEvent("hls-lib-load-start"));
}
ue(ctor) {
this.ph.player.dispatchEvent(
new DOMEvent("hls-lib-loaded", {
detail: ctor
})
);
this.jf(ctor);
}
Dh(e) {
const error = coerceToError(e);
this.ph.player.dispatchEvent(
new DOMEvent("hls-lib-load-error", {
detail: error
})
);
this.ph.delegate.p("error", {
detail: { message: error.message, code: 4 }
});
}
}
async function importHLS(loader, callbacks = {}) {
if (isUndefined(loader))
return void 0;
callbacks.onLoadStart?.();
if (loader.prototype && loader.prototype !== Function) {
callbacks.onLoaded?.(loader);
return loader;
}
try {
const ctor = (await loader())?.default;
if (ctor && !!ctor.isSupported) {
callbacks.onLoaded?.(ctor);
} else {
throw Error(
false ? "[vidstack] failed importing `hls.js`. Dynamic import returned invalid constructor." : ""
);
}
return ctor;
} catch (err) {
callbacks.onLoadError?.(err);
}
return void 0;
}
async function loadHLSScript(src, callbacks = {}) {
if (!isString(src))
return void 0;
callbacks.onLoadStart?.();
try {
await loadScript(src);
if (!isFunction(window.Hls)) {
throw Error(
false ? "[vidstack] failed loading `hls.js`. Could not find a valid `Hls` constructor on window" : ""
);
}
const ctor = window.Hls;
callbacks.onLoaded?.(ctor);
return ctor;
} catch (err) {
callbacks.onLoadError?.(err);
}
return void 0;
}
export { HLSLibLoader as H };