Presentando new-js-clock

Hace más de 15 años publiqué un pequeño plugin de jQuery llamado JS-Clock. Era un widget sencillo que renderizaba un reloj en marcha dentro de un elemento del DOM — útil, simple y completamente de su época. Dependía de jQuery, tenía algunos problemas con el soporte de múltiples instancias, y nunca fue actualizado de forma significativa tras ese lanzamiento inicial.

Hoy eso cambia. Estoy lanzando new-js-clock 1.0.0 — una reescritura completa en TypeScript que mantiene el espíritu del original dejando atrás cada una de sus limitaciones. Puedes verla en acción en la página de demostración.

Qué hay de nuevo en 1.0.0

Todo lo que llegó en esta versión:

  • 🔒 TypeScript — Tipado completo con interfaces exhaustivas en todo el código.
  • 🌐 Suite de pruebas E2E + unitarias — Cobertura Jest determinista más pruebas E2E con Selenium en navegadores reales, incluida la validación extendida del comportamiento en pestañas en segundo plano.
  • 📦 Sin dependencias — JavaScript puro. Sin necesidad de jQuery.
  • 🐛 Correcciones de errores — El soporte de múltiples instancias ahora funciona correctamente, que era el principal problema en la versión 0.8.
  • API moderna — Una API limpia e intuitiva con métodos de instancia propios en cada reloj creado.
  • 🧪 Completamente probado — 162 pruebas Jest deterministas con 99,74 % de cobertura de líneas, 99,02 % de cobertura de sentencias, 100 % de cobertura de funciones y 98,32 % de cobertura de ramas.
  • 🐳 Grid E2E Dockerizado — Selenium Grid ejecutando Chrome, Firefox y Edge en modo headless localmente y en CI mediante pnpm run e2e:docker.
  • 📱 ES Modules — Importaciones de ES Module con soporte de tree-shaking, junto con bundles CommonJS e IIFE.
  • 🌍 Zonas horarias con horario de verano — Soporte de zonas horarias IANA con gestión automática del horario de verano.
  • ⏱️ Modo cronómetro — Un nuevo cronómetro que cuenta desde 00:00:00.
  • 🏁 Tiempos de vuelta y split — Registra tiempos de vuelta (delta) y tiempos acumulados (split) en modo cronómetro.
  • 📊 Mejor/Peor vuelta — Funciones de ayuda integradas para encontrar la vuelta más rápida y la más lenta de una sesión.
  • 🎯 Temporización de alta resolución — Deltas de vuelta medidos mediante performance.now() con precisión de submilisegundos.

Instalación

npm install new-js-clock
# o
pnpm add new-js-clock

También está disponible a través de CDN para su uso directo en el navegador — consulta el README para los enlaces de unpkg y jsDelivr.

¿Por qué tardó tanto?

¿Honestamente? La vida. El JS-Clock original fue escrito a petición de mi difunto amigo Gustavo Beltrão (un maestro del PHP en aquella época, con quien tuve el privilegio de trabajar en más de una ocasión) para ser utilizado en dashboards internos corporativos y también en sitios de página única para eventos con visitantes de distintas zonas horarias. Cumplió bien su función, por lo que nunca pareció urgente revisarlo. Pero jQuery lleva mucho tiempo desaparecido de los proyectos modernos, TypeScript se ha convertido en el estándar para el desarrollo de bibliotecas, y el bug del soporte de múltiples instancias siempre me molestó. Cuando por fin me senté a corregirlo correctamente, tenía sentido hacerlo bien — con tipos, pruebas, un sistema de módulos moderno y suficientes funcionalidades para ser genuinamente útil en 2026. Además, tengo pensado usarla en mi próximo proyecto comercial.

Más vale tarde que nunca.

¡A Jesucristo solo sea la gloria!