За даними Infoq, популярний JavaScript-клієнт Ky отримав своє перше велике оновлення за кілька років. Розробники зосередилися на покращенні архітектури хуків, виправленні тривалих проблем із обробкою URL та додаванні можливостей для суворої типізації відповідей.
Уніфікація хуків та керування таймаутами
Одним із ключових змін у Ky 2.0 є перехід на єдиний об'єкт стану для всіх хуків. Тепер такі функції, як beforeRequest, afterResponse, beforeRetry та beforeError, отримують один аргумент замість окремих параметрів. Це робить API консистентним і спрощує його розширення в майбутньому. Також додано новий хук init, що виконується перед будь-якими іншими діями.
Важливою зміною стала реформа таймаутів. Окрім стандартного таймауту для окремих спроб, з'явився параметр totalTimeout. Він обмежує час виконання всієї операції, включаючи повторні спроби та затримки, викидаючи TimeoutError у разі перевищення ліміту.
Валідація даних та робота з помилками
Ky 2.0 інтегрував підтримку Standard Schema для методу .json(). Це дозволяє розробникам відразу валідувати та типізувати відповіді за допомогою Zod, Valibot або інших сумісних валідаторів. Крім того, об'єкт HTTPError тепер містить попередньо розпарсовану властивість data, що запобігає витокам ресурсів і дозволяє отримувати тіло помилки без додаткових запитів.
Щодо обробки мережевих помилок, команда впровадила спеціальний клас NetworkError. Автоматичні повтори тепер спрацьовують лише на справжні мережеві збої, як-от помилки DNS або відмова у з'єднанні, ігноруючи програмні помилки розробника.
Порівняння з Axios та технічні вимоги
Підтримувач проекту Seth Holladay зазначив, що Ky був створений саме для роботи з Fetch API з самого початку, тоді як Axios намагається адаптуватися до нього, що не завжди дає оптимальний результат. Він також підкреслив кращу підтримку TypeScript у Ky, зокрема вбудовану валідацію схем із виведенням типів.
Нова версія має такі технічні особливості:
- Вимагає Node.js 22 або новіші версії;
- Метод .json() тепер викидає помилку на порожніх відповідях та кодах 204 замість повернення порожнього рядка;
- Параметр searchParams автоматично об'єднується з існуючими запитами в URL;
- Обробка тіл помилок здійснюється через error.data.
Ky залишається легким рішенням вагою лише у кілька кілобайт, що забезпечує його перевагу як Fetch-native альтернативи для сучасних середовищ виконання.