UNPKG

vidstack

Version:

Build awesome media experiences on the web.

108 lines (105 loc) 3.26 kB
import { isUndefined, isString, DOMEvent, isFunction } from 'maverick.js/std'; import { R as coerceToError, U as loadScript } from '../../media-core.js'; class HLSLibLoader { constructor(_lib, _context, _callback) { this._lib = _lib; this._context = _context; this._callback = _callback; this._startLoading(); } async _startLoading() { this._context.logger?.info("\u{1F3D7}\uFE0F Loading HLS Library"); const callbacks = { onLoadStart: this._onLoadStart.bind(this), onLoaded: this._onLoaded.bind(this), onLoadError: this._onLoadError.bind(this) }; let ctor = await loadHLSScript(this._lib, callbacks); if (isUndefined(ctor) && !isString(this._lib)) ctor = await importHLS(this._lib, callbacks); if (!ctor) return null; if (!ctor.isSupported()) { const message = "[vidstack]: `hls.js` is not supported in this environment"; this._context.logger?.error(message); this._context.player.dispatchEvent(new DOMEvent("hls-unsupported")); this._context.delegate._dispatch("error", { detail: { message, code: 4 } }); return null; } return ctor; } _onLoadStart() { { this._context.logger?.infoGroup("Starting to load `hls.js`").labelledLog("URL", this._lib).dispatch(); } this._context.player.dispatchEvent(new DOMEvent("hls-lib-load-start")); } _onLoaded(ctor) { { this._context.logger?.infoGroup("Loaded `hls.js`").labelledLog("Library", this._lib).labelledLog("Constructor", ctor).dispatch(); } this._context.player.dispatchEvent( new DOMEvent("hls-lib-loaded", { detail: ctor }) ); this._callback(ctor); } _onLoadError(e) { const error = coerceToError(e); { this._context.logger?.errorGroup("Failed to load `hls.js`").labelledLog("Library", this._lib).labelledLog("Error", e).dispatch(); } this._context.player.dispatchEvent( new DOMEvent("hls-lib-load-error", { detail: error }) ); this._context.delegate._dispatch("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( true ? "[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( true ? "[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 };