Определяйте один раз — доверяйте везде
CtroEnv использует четыре основные фабрики валидаторов, чтобы обеспечить безопасность ваших переменных окружения.
Вот как они работают:
string() для текста Используйте это для URL-адресов, email-адресов и портов. Вы можете объединять правила, такие как .min() или .max(), чтобы установить ограничения по длине.
number() для числовых значений Это преобразует строки вроде "3000" в реальные числа. Вы можете требовать целые числа или только положительные значения.
boolean() для true или false Это используется для feature flags. Преобразует "true", "1" или "false" в настоящие булевы значения.
pick() для определенных наборов Используйте это, чтобы ограничить значения списком. Например, вы можете заставить NODE_ENV принимать только значения "development", "staging" или "production". Если вы допустите опечатку, ошибка предложит правильный вариант написания.
Полезные инструменты для каждого валидатора:
• .default(value) — устанавливает значение по умолчанию, если переменная отсутствует. • .optional() — позволяет переменной быть undefined. • .secret() — маскирует конфиденциальные данные в ваших логах. • .describe(text) — добавляет документацию к вашим сообщениям об ошибках. • .validate(fn) — позволяет писать пользовательскую логику для разовых правил.
CtroEnv работает в различных средах:
- Node.js: используйте nodeSource() или loadEnv() для чтения .env файлов.
- Vite: используйте vitePlugin, чтобы прервать сборку, если переменные невалидны.
- Next.js: используйте встроенную поддержку для разделения переменных сервера и клиента. Это предотвращает случайное раскрытие секретов в браузере.
Когда валидация не проходит, CtroEnv не просто останавливается. Он собирает каждую ошибку и выводит их все сразу. Вы получаете четкий список того, что отсутствует, что имеет неверный тип и что не прошло ваши пользовательские правила.
Это делает вашу конфигурацию неизменяемой, а runtime — предсказуемым.
Источник: https://dev.to/ctrotech/define-once-trust-everywhere-ctroenv-deep-dive-3bjl