"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAudioDuration = exports.getAudioDurationInSeconds = void 0; /* eslint-disable @typescript-eslint/no-use-before-define */ const media_tag_error_handling_1 = require("./media-tag-error-handling"); const p_limit_1 = require("./p-limit"); const limit = (0, p_limit_1.pLimit)(3); const metadataCache = {}; const fn = (src) => { if (metadataCache[src]) { return Promise.resolve(metadataCache[src]); } if (typeof document === 'undefined') { throw new Error('getAudioDuration() is only available in the browser.'); } const audio = document.createElement('audio'); audio.src = src; return new Promise((resolve, reject) => { const onError = () => { (0, media_tag_error_handling_1.onMediaError)({ error: audio.error, src, cleanup, reject, api: 'getAudioDurationInSeconds()', }); }; const onLoadedMetadata = () => { metadataCache[src] = audio.duration; resolve(audio.duration); cleanup(); }; const cleanup = () => { audio.removeEventListener('loadedmetadata', onLoadedMetadata); audio.removeEventListener('error', onError); audio.remove(); }; audio.addEventListener('loadedmetadata', onLoadedMetadata, { once: true }); audio.addEventListener('error', onError, { once: true }); }); }; /** * @description Gets the duration in seconds of an audio source by creating an invisible `