Представляємо new-js-clock

Понад 15 років тому я опублікував невеликий jQuery-плагін під назвою JS-Clock. Це був простий віджет, який відображав годинник, що цокає, у DOM-елементі — корисний, незамисловатий і цілком відповідний духу свого часу. Він залежав від jQuery, мав певні недоліки у підтримці кількох екземплярів і жодного разу не оновлювався скільки-небудь суттєво після першого релізу.

Сьогодні це змінюється. Я випускаю new-js-clock 1.0.0 — повністю переписану версію на TypeScript, яка зберігає дух оригіналу, залишаючи позаду всі його недоліки. Побачити її в дії можна на сторінці демо.

Що нового у 1.0.0

Все, що увійшло у цей реліз:

  • 🔒 TypeScript — Повна типобезпека з вичерпними інтерфейсами у всьому коді.
  • 🌐 Набір тестів E2E + юніт — Детерміноване покриття Jest плюс E2E-тести Selenium у реальних браузерах, включаючи розширену валідацію поведінки у фонових вкладках.
  • 📦 Нуль залежностей — Чистий ванільний JavaScript. jQuery не потрібен.
  • 🐛 Виправлення помилок — Підтримка кількох екземплярів тепер працює коректно — це була головна проблема у версії 0.8.
  • Сучасний API — Чистий, інтуїтивний API з власними методами екземпляра для кожного створеного годинника.
  • 🧪 Повністю протестовано — 162 детерміновані тести Jest з покриттям рядків 99,74 %, покриттям операторів 99,02 %, покриттям функцій 100 % та покриттям гілок 98,32 %.
  • 🐳 Докеризована E2E-сітка — Selenium Grid, що запускає Chrome, Firefox та Edge у режимі headless локально та в CI через pnpm run e2e:docker.
  • 📱 ES-модулі — Імпорти ES Module з підтримкою tree-shaking, поруч із бандлами CommonJS та IIFE.
  • 🌍 Часові пояси з урахуванням літнього часу — Підтримка часових поясів IANA з автоматичною обробкою переходу на літній час.
  • ⏱️ Режим секундоміра — Новий секундомір, що відраховує від 00:00:00.
  • 🏁 Час кіл та сплітів — Запис часу кіл (дельта) та накопиченого часу (спліт) у режимі секундоміра.
  • 📊 Найкращий/найгірший круг — Вбудовані допоміжні функції для пошуку найшвидшого та найповільнішого кола у сесії.
  • 🎯 Таймер високої роздільної здатності — Дельти кіл вимірюються через performance.now() з точністю до субмілісекунди.

Встановлення

npm install new-js-clock
# або
pnpm add new-js-clock

Також доступно через CDN для прямого використання в браузері — дивіться README для посилань на unpkg та jsDelivr.

Чому це так довго тривало?

Чесно? Життя. Оригінальний JS-Clock був написаний на прохання мого покійного друга Густаво Белтрана (справжнього майстра PHP в ті часи, з яким мені пощастило працювати не раз) для використання у внутрішніх корпоративних дашбордах і на односторінкових сайтах для заходів з учасниками з різних часових поясів. Він справлявся зі своїм завданням достатньо добре, щоб не здавалось терміновим його переглядати. Але jQuery давно пішов із сучасних проектів, TypeScript став стандартом для розробки бібліотек, а баг із підтримкою кількох екземплярів завжди мене дратував. Коли я нарешті сів, щоб виправити його як слід, стало очевидним: потрібно зробити все по-справжньому — з типами, тестами, сучасною системою модулів і достатньою кількістю функцій, щоб бути справді корисним у 2026 році. До того ж я планую використати її у своєму наступному комерційному проекті.

Краще пізно, ніж ніколи.

Ісусу Христу єдиному слава!