@nitra/check-env
Version:
Check that the critical environment variables are set
75 lines (62 loc) • 1.67 kB
JavaScript
import process from 'node:process'
const testEnv = name => !process.env[name]
const displayMissing = name => {
console.error(`❌ Missing required environment variable ${name}`)
}
/**
* MissingEnvironmentVariableError
*
* @class
* @extends Error
*/
export class MissingEnvironmentVariableError extends Error {
constructor(envs) {
const joined = envs.join(', ')
super(`Some required environment variables are missing: ${joined}`)
}
}
const checked = new Set()
/**
* Перевірка наявності змінних середовища
*
* @function
* @param {Array.<String>} required
*/
export const checkEnv = required => {
const missingReq = []
required.forEach(name => {
// додаємо в список перевірених
checked.add(name)
if (testEnv(name)) {
displayMissing(name)
missingReq.push(name)
}
})
if (missingReq.length > 0) {
throw new MissingEnvironmentVariableError(missingReq)
}
}
/**
* Для сумісності з попередніми версіями
*
* @param {Array.<String>} required to capture
*/
export default checkEnv
const envProxyHandler = {
/**
* Set colour of object
* @returns {String}
*/
get(target, prop, _) {
// Якщо зі списку перевірених то повертаємо значення
// інакше аварійно завершуємо програму
if (!checked.has(prop)) {
throw new Error(`❌ Environment variable ${prop} is not checked`)
}
return target[prop]
}
}
/**
* @type {Object.<string, string>}
*/
export const env = new Proxy(process.env, envProxyHandler)