CheckerEnvKeys
Проверяет совпадение нескольких списков ключей и дубликаты внутри них. Для безопасности чекер не читает файлы сам, их парсинг остается за пользователем.
Для watch-режима env-файлы должны находиться внутри rootDir. Передавайте ключи через геттер envKeys, как в примерах: массив, созданный один раз, не обновится.
ts | Массив объектов, каждый из которых содержит:
|
Пример: синхронизация env-файлов
Чекер сравнивает ключи в .env и .example.env и сообщает о расхождении
new CheckerEnvKeys({
get envKeys() {
function readEnvKeys(fileName: string) {
return {
name: fileName,
keys: Object.keys(parseEnv(fs.readFileSync(path.resolve(rootDir, fileName), 'utf8'))),
};
}
return [readEnvKeys('.env'), readEnvKeys('.example.env')];
},
}),
Запустить Sandbox
NODE_ENV=development
EXPRESS_PORT=3000
NODE_ENV=development
EXPRESS_PORT=3000
[ARFA-GEN] finished in 0ms
Пример: env-файлы и типизированный env-объект
Ключи файлов сравниваются с ключами готового env-объекта. Так чекер находит переменные, объявленные в коде, но забытые в env-файлах
new CheckerEnvKeys({
get envKeys() {
function readEnvKeys(fileName: string) {
return {
name: fileName,
keys: Object.keys(parseEnv(fs.readFileSync(path.resolve(rootDir, fileName), 'utf8'))),
};
}
class Env {
NODE_ENV: 'development' | 'production' = 'development';
EXPRESS_PORT = 0;
HOT_RELOAD = false;
constructor(source: Record<string, string | undefined>) {
this.NODE_ENV = source.NODE_ENV === 'production' ? 'production' : 'development';
this.EXPRESS_PORT = Number(source.EXPRESS_PORT ?? 0);
this.HOT_RELOAD = source.HOT_RELOAD === 'true';
}
}
const env = new Env(process.env);
return [
readEnvKeys('.env'),
readEnvKeys('example.dev.env'),
readEnvKeys('example.prod.env'),
{ name: 'parsed', keys: Object.keys(env) },
];
},
}),
Запустить Sandbox
NODE_ENV=development
EXPRESS_PORT=3000
NODE_ENV=development
EXPRESS_PORT=3000
NODE_ENV=production
EXPRESS_PORT=8080
[ARFA-GEN] [env-keys] Keys mismatch
[ARFA-GEN] .env vs parsed: .env missing HOT_RELOAD
[ARFA-GEN] [env-keys] Keys mismatch
[ARFA-GEN] example.dev.env vs parsed: example.dev.env missing HOT_RELOAD
[ARFA-GEN] [env-keys] Keys mismatch
[ARFA-GEN] example.prod.env vs parsed: example.prod.env missing HOT_RELOAD
[ARFA-GEN] finished in 0ms
Пример: дубли ключей в env-файле
Для демонстрации дублей в данном случае используется построчное чтение
new CheckerEnvKeys({
get envKeys() {
const content = fs.readFileSync(path.resolve(rootDir, '.env'), 'utf8');
return [
{
name: '.env',
keys: content.split(/\r?\n/).flatMap((line) => Object.keys(parseEnv(line))),
},
];
},
}),
Запустить Sandbox
NODE_ENV=development
EXPRESS_PORT=3000
[ARFA-GEN] finished in 0ms