/**
 * @archivo extender.js
 * @módulo extender
 * /

import _inherits from '@babel/runtime/helpers/inherits';
importar registro desde './utils/log.js';

let hasLogged = false;

/**
 * Se usa para subclasificar una clase existente emulando la subclasificación ES usando el
 * Palabra clave `extiende`.
 *
 * @función
 * @obsoleto
 * @ejemplo
 * var MiComponente = videojs.extend(videojs.getComponent('Componente'), {
 * miMetodoPersonalizado: function() {
 * // Hacer cosas en mi método.
 * }
 * });
 *
 * @param {Función} superclase
 * La clase a heredar de
 *
 * @param {Objeto} [subClassMethods={}]
 * Métodos de la nueva clase
 *
 * @return {Función}
 * La nueva clase con subClassMethods que heredó superClass.
 * /
const extender = función (superClase, subClassMethods = {}) {

  // Registrar una advertencia la primera vez que se llama a extender para notar que está en desuso
  // Anteriormente estaba en desuso en nuestra documentación (guías, específicamente),
  // pero nunca se desaprobó formalmente en el código.
  si (! ha registrado) {
    log.warn('videojs.extend está obsoleto a partir de Video.js 7.22.0 y se eliminará en Video.js 8.0.0');
    haLogged = verdadero;
  }

  dejar subclase = función () {
    superClass.apply(esto, argumentos);
  };

  dejar métodos = {};

  if (tipo de subClassMethods === 'objeto') {
    if (subClassMethods.constructor !== Object.prototype.constructor) {
      subclase = subClassMethods.constructor;
    }
    métodos = subClassMethods;
  } else if (tipo de subClassMethods === 'función') {
    subclase = métodos de subclase;
  }

  _hereda(subclase, superclase);

  // esto es necesario para la compatibilidad con versiones anteriores y la compatibilidad de nodos.
  si (superclase) {
    subclase.super_ = superclase;
  }

  // Ampliar el prototipo de subObj con funciones y otras propiedades de props
  for (nombre constante en métodos) {
    if (métodos.hasOwnProperty(nombre)) {
      subClass.prototype[nombre] = métodos[nombre];
    }
  }

  volver subclase;
};

exportar extensión predeterminada;