/**
* @file time-ranges.js
* rangos de tiempo @module
* /
importar ventana desde 'global/window';
/ **
* Devuelve el tiempo para el índice especificado al principio o al final
* de un objeto TimeRange.
*
* @typedef {Función} TimeRangeIndex
*
* @param {número} [índice=0]
* El número de rango para devolver el tiempo.
*
* @return {número}
* El desplazamiento de tiempo en el índice especificado.
*
* @deprecated Se debe proporcionar el argumento de índice.
* En el futuro, dejarlo fuera arrojará un error.
* /
/ **
* Un objeto que contiene rangos de tiempo.
*
* @typedef {Objeto} Intervalo de tiempo
*
* @property {número} longitud
* El número de intervalos de tiempo representados por este objeto.
*
* @property {módulo: intervalos de tiempo ~ TimeRangeIndex} inicio
* Devuelve el desplazamiento de tiempo en el que comienza un intervalo de tiempo especificado.
*
* @property {módulo:intervalos de tiempo~TimeRangeIndex} end
* Devuelve el desplazamiento de tiempo en el que finaliza un intervalo de tiempo especificado.
*
* @ver https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges
* /
/ **
* Comprobar si alguno de los rangos de tiempo está por encima del índice máximo.
*
* @privado
* @param {cadena} fnName
* El nombre de la función que se usará para iniciar sesión
*
* @param {número} índice
* El índice para comprobar
*
* @param {número} maxIndex
* El índice máximo posible
*
* @arroja {Error} si los intervalos de tiempo proporcionados están por encima del índice máximo
* /
función rangeCheck(fnName, index, maxIndex) {
if (tipo de índice !== 'número' || índice < 0 || índice > índicemáx) {
throw new Error(`Error al ejecutar '${fnName}' en 'TimeRanges': El índice proporcionado (${index}) no es numérico o está fuera de los límites (0-${maxIndex}).`);
}
}
/ **
* Obtenga el tiempo para el índice especificado al principio o al final
* de un objeto TimeRange.
*
* @privado
* @param {cadena} fnName
* El nombre de la función que se usará para iniciar sesión
*
* @param {cadena} índice de valor
* La propiedad que debe usarse para obtener el tiempo. debiera ser
* 'comienzo' o 'fin'
*
* @param {Array} rangos
* Una matriz de rangos de tiempo
*
* @param {Array} [índice de rango=0]
* El índice para iniciar la búsqueda en
*
* @return {número}
* El tiempo que compensa en el índice especificado.
*
* @deprecated rangeIndex debe establecerse en un valor; en el futuro, esto arrojará un error.
* @arroja {Error} si rangeIndex es mayor que la longitud de los rangos
* /
función getRange(fnName, valueIndex, ranges, rangeIndex) {
rangeCheck(fnName, rangeIndex, ranges.length - 1);
rangos de retorno [índice de rango] [índice de valor];
}
/ **
* Crear un objeto de rango de tiempo dado rangos de tiempo.
*
* @privado
* @param {Array} [rangos]
* Una matriz de rangos de tiempo.
* /
function crearTimeRangesObj(rangos) {
dejar timeRangesObj;
if (rango === indefinido || rangos.longitud === 0) {
timeRangesObj = {
longitud: 0,
comenzar() {
throw new Error('Este objeto TimeRanges está vacío');
},
fin() {
throw new Error('Este objeto TimeRanges está vacío');
}
};
} else {
timeRangesObj = {
longitud: rangos.longitud,
inicio: getRange.bind(nulo, 'inicio', 0, rangos),
fin: getRange.bind(nulo, 'fin', 1, rangos)
};
}
si (ventana. Símbolo && ventana.Símbolo.iterador) {
timeRangesObj[ventana.Símbolo.iterador] = () => (rango || []).valores();
}
retorno timeRangesObj;
}
/ **
* Cree un objeto `TimeRange` que imite un
* {@enlace https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges|Instancia de HTML5 TimeRanges}.
*
* @param {número|Array[]} comienzo
* El comienzo de un solo rango (un número) o una matriz de rangos (un
* arreglo de arreglos de dos números cada uno).
*
* @param {número} fin
* El final de un solo rango. No se puede utilizar con la forma de matriz de
* el argumento `inicio`.
* /
función de exportación createTimeRanges (inicio, fin) {
if (Array.isArray(inicio)) {
devuelve createTimeRangesObj(inicio);
} else if (inicio === indefinido || final === indefinido) {
devuelve createTimeRangesObj();
}
return createTimeRangesObj([[inicio, fin]]);
}
exportar { createTimeRanges as createTimeRange };