В библиотеке Validator.js часть методов со временем помечается как
устаревшая (deprecated). Причины появления устаревших API
обычно связаны со следующими факторами:
Устаревший метод продолжает работать некоторое время для обратной совместимости, однако его использование не рекомендуется. В новых версиях такие методы могут быть полностью удалены.
Устаревший метод — это функция, которая:
Пример типичного предупреждения:
Deprecated: use isTaxID() instead
При обновлении проекта до новых версий Validator.js подобные методы становятся источником ошибок и несовместимости.
В документации Validator.js устаревшие методы обычно сопровождаются:
Пример:
Deprecated since version 13.x
Современные инструменты анализа кода способны выявлять deprecated API.
Пример:
validator.oldMethod(value);
ESLint может сообщить:
'oldMethod' is deprecated
Некоторые методы устаревают из-за несовместимости с современными требованиями:
Ранние версии Validator.js содержали менее строгие механизмы проверки email.
Пример проблем:
validator.isEmail("test@localhost");
Старое поведение могло считать строку корректной, хотя современная конфигурация запрещает подобные адреса.
Некоторые методы изменяли формат параметров.
Старый вариант:
validator.isEmail(email, true);
Новый вариант:
validator.isEmail(email, {
allow_display_name: true
});
Позиционные параметры создавали проблемы:
В старых версиях использовались менее гибкие правила:
validator.isURL(url, false);
Современный вариант:
validator.isURL(url, {
require_protocol: true
});
Старые проверки URL часто:
Ранее библиотека содержала методы очистки строк, ориентированные на старые уязвимости.
Пример:
validator.removeNullBytes(str);
Подобные методы постепенно теряют актуальность, поскольку:
Поведение normalizeEmail() со временем менялось.
Старые конфигурации:
validator.normalizeEmail(email, {
remove_dots: false
});
Новые версии могут:
Иногда метод удаляется из-за потенциальной уязвимости.
Пример проблем:
Метод может работать по-разному в разных средах:
validator.isFloat("1,5");
Проблема:
Некоторые методы дублируют функциональность JavaScript.
Пример:
validator.toInt(value);
Вместо этого часто используется:
Number.parseInt(value, 10);
В старых версиях:
validator.toDate(value);
Проблемы:
Date.parse;Современный подход:
new Date(value);
или специализированные библиотеки:
Пример:
validator.toFloat(value);
Замена:
Number.parseFloat(value);
Причины отказа:
Старые версии Validator.js были более «мягкими».
Пример:
validator.isURL("example.com");
Современные версии часто требуют:
validator.isURL("https://example.com");
с опцией:
{
require_protocol: true
}
Email-проверки постепенно приближались к RFC-стандартам.
Изменения касались:
Мгновенное удаление функций приводит к:
Поэтому применяется жизненный цикл:
Linux/macOS:
grep -rn "toFloat" ./src
Современные IDE умеют:
При обновлении Validator.js необходимо изучать changelog.
Особое внимание уделяется разделам:
Старый код:
validator.isURL(url, true);
Новый код:
validator.isURL(url, {
require_protocol: true
});
Старый вариант:
validator.isEmail(email, true);
Новый вариант:
validator.isEmail(email, {
allow_display_name: true
});
После обновления часть данных может перестать проходить проверку.
Причины:
Пример:
validator.normalizeEmail("user.name@gmail.com");
Разные версии могут возвращать:
username@gmail.com
или
user.name@gmail.com
в зависимости от конфигурации.
Временная защита:
{
"validator": "13.9.0"
}
или:
{
"validator": "^13.9.0"
}
Опасно:
npm install validator@latest
Предпочтительно:
npm install validator@14
с последующим тестированием.
Перед обновлением полезно покрывать тестами:
Плохая практика:
// TODO: fix later
validator.toFloat(value);
Со временем подобные участки превращаются в технический долг.
Проблемный пример:
validator.isEmail(email, true);
validator.isURL(url, {
require_protocol: true
});
В кодовой базе появляются разные стили использования.
Даже минорные изменения Validator.js способны изменить результаты проверки.
Особенно чувствительны:
Предпочтительно:
validator.isURL(url, {
protocols: ["http", "https"],
require_protocol: true,
require_host: true
});
Часть преобразований лучше выполнять стандартными средствами Jav * aScript:
String(value).trim();
Number.parseFloat(value);
Рекомендуется:
Старые методы:
Устаревшие проверки могут:
Код со старыми API хуже адаптируется:
const validator = require("validator");
function validate(data) {
return validator.isEmail(data.email, true) &&
validator.isURL(data.site, true);
}
const validator = require("validator");
function validate(data) {
return validator.isEmail(data.email, {
allow_display_name: true
}) &&
validator.isURL(data.site, {
require_protocol: true
});
}
Устаревшие методы особенно проблемны в TypeScript-проектах.
Причины:
Пример предупреждения:
'toFloat' is deprecated.
Плагины способны:
Для крупных проектов используются автоматические преобразования:
validator.isEmail(email, true);
→
validator.isEmail(email, {
allow_display_name: true
});
Иногда создаётся совместимый API:
function validateEmail(email, allowDisplayName) {
return validator.isEmail(email, {
allow_display_name: allowDisplayName
});
}
В больших проектах миграция выполняется:
Характерные особенности:
Изменения:
Тенденции: