import { MediaError } from "../../core/media-error.js"; import Hls from "hls.js"; //#region src/dom/hls-js/errors.ts const hlsErrorTypeToCode = { [Hls.ErrorTypes.NETWORK_ERROR]: MediaError.MEDIA_ERR_NETWORK, [Hls.ErrorTypes.MEDIA_ERROR]: MediaError.MEDIA_ERR_DECODE, [Hls.ErrorTypes.KEY_SYSTEM_ERROR]: MediaError.MEDIA_ERR_ENCRYPTED, [Hls.ErrorTypes.MUX_ERROR]: MediaError.MEDIA_ERR_DECODE, [Hls.ErrorTypes.OTHER_ERROR]: MediaError.MEDIA_ERR_CUSTOM }; function HlsJsMediaErrorsMixin(BaseClass) { class HlsJsMediaErrors extends BaseClass { #disconnect = null; #error = null; constructor(...args) { super(...args); this.engine?.on(Hls.Events.MANIFEST_LOADING, () => this.#init()); this.engine?.on(Hls.Events.MEDIA_ATTACHED, () => this.#init()); this.engine?.on(Hls.Events.MEDIA_DETACHED, () => this.#destroy()); this.engine?.on(Hls.Events.DESTROYING, () => this.#destroy()); } get error() { return this.#error; } #destroy() { this.#disconnect?.abort(); this.#disconnect = null; } #init() { this.#disconnect?.abort(); this.#disconnect = new AbortController(); const { engine, target } = this; if (!engine || !target) return; const onError = (_event, data) => { if (!data.fatal) return; const code = hlsErrorTypeToCode[data.type] ?? MediaError.MEDIA_ERR_CUSTOM; const error = new MediaError(data.error?.message, code, true, data.details); error.data = data; this.#error = error; const event = new ErrorEvent("error", { error, message: error.message }); this.dispatchEvent(event); }; engine.on(Hls.Events.ERROR, onError); this.#disconnect.signal.addEventListener("abort", () => { engine.off(Hls.Events.ERROR, onError); this.#error = null; }, { once: true }); } } return HlsJsMediaErrors; } //#endregion export { HlsJsMediaErrorsMixin }; //# sourceMappingURL=errors.js.map