Apresentando o new-js-clock

Há mais de 15 anos publiquei um pequeno plugin jQuery chamado JS-Clock. Era um widget directo ao ponto que renderizava um relógio em tick-tack dentro de um elemento do DOM — útil, simples, e completamente do seu tempo. Dependia do jQuery, tinha alguns problemas com suporte a múltiplas instâncias, e nunca foi actualizado de forma significativa após aquele lançamento inicial.

Hoje isso muda. Estou a lançar a biblioteca new-js-clock 1.0.0 — uma reescrita completa em TypeScript que preserva o espírito do plugin original enquanto deixa para trás cada uma das suas limitações. Pode vê-la em acção na página de demonstração.

O que há de novo na v1.0.0

Tudo o que chegou nesta versão:

  • 🔒 TypeScript — Tipagem completa com interfaces abrangentes em todo o código.
  • 🌐 Suite de Testes E2E + Unitários — Cobertura determinística com Jest mais testes E2E com Selenium em navegadores reais, incluindo validação de comportamento em separadores em segundo plano.
  • 📦 Zero Dependências — JavaScript puro. Sem jQuery.
  • 🐛 Correcções de Bugs — O suporte a múltiplas instâncias funciona agora correctamente, que era o principal problema na v0.8.
  • API Moderna — Uma API limpa e intuitiva com métodos de instância próprios em cada relógio criado.
  • 🧪 Totalmente Testado — 162 testes Jest determinísticos com 99,74% de cobertura de linhas, 99,02% de cobertura de instruções, 100% de cobertura de funções e 98,32% de cobertura de branches.
  • 🐳 Grid E2E Dockerizado — Selenium Grid a correr Chrome, Firefox e Edge em modo headless localmente e em CI via pnpm run e2e:docker.
  • 📱 ES Modules — Imports ES Module com suporte a tree-shaking, acompanhados de bundles CommonJS e IIFE.
  • 🌍 Fusos Horários com Suporte a Horário de Verão — Suporte a fusos IANA com tratamento automático do horário de verão.
  • ⏱️ Modo Cronómetro — Um novo cronómetro que conta a partir de 00:00:00.
  • 🏁 Tempos de Volta e Split — Registe tempos de volta (delta) e tempos acumulados (split) no modo cronómetro.
  • 📊 Melhor/Pior Volta — Funções auxiliares nativas para encontrar a volta mais rápida e a mais lenta de uma sessão.
  • 🎯 Temporização de Alta Resolução — Deltas de volta medidos via performance.now() com precisão submilissegundo.

Instalação

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

Também está disponível via CDN para utilização directa no navegador — consulte o README para os links do unpkg e jsDelivr.

Porque é que demorou tanto?

Honestamente? A vida. O JS-Clock original foi escrito por conta de um pedido do meu saudoso amigo Gustavo Beltrão (um mestre em PHP naquela época, com quem tive o privilégio de trabalhar em mais de uma ocasião) para ser utilizado em dashboards internos corporativos e também em sites de página única para eventos com visitantes de diferentes fusos horários. Ele cumpriu bem o seu papel, pelo que nunca pareceu urgente revisitá-lo. Mas o jQuery há muito ficou para trás nos projectos modernos, o TypeScript tornou-se o padrão para o desenvolvimento de bibliotecas, e o bug de suporte a múltiplas instâncias sempre me incomodou. Quando finalmente me sentei para o corrigir de forma adequada, fez sentido fazê-lo bem — com tipos, testes, um sistema de módulos moderno e funcionalidades suficientes para ser genuinamente útil em 2026. Aliás, pretendo utilizá-la no meu próximo projecto comercial.

Antes tarde do que nunca.

A Jesus Cristo seja toda a glória!