Repository URL to install this package:
|
Version:
1.3.3 ▾
|
import { toNumber, isNumber, isString, isBoolean, hasOwnProp } from 'exotic'
import { Primitive } from 'exotic/typings'
function isDotEnvTrueBoolean(value: any): value is 'true' | '1' | true {
return value === 'true' || value === '1' || value === true
}
function isDotEnvFalseBoolean(value: any): value is 'false' | '0' | false {
return value === 'false' || value === '0' || value === false
}
/**
* Gets a string environment variable by the given name.
*
* @param name - The name of the environment variable.
* @param defaultVal - The default value to use.
* @returnString(process.env[name])
*/
function getEnvString(name: string, defaultVal?: string) {
return String(process.env[name] || defaultVal)
}
/**
* Gets a number environment variable by the given name.
*
* @param name - The name of the environment variable.
* @param defaultVal - The default value to use.
* @return +process.env[name]
*/
function number(name: string, defaultVal?: number): number {
return toNumber(process.env[name] ? process.env[name] : defaultVal)
}
/**
* @param name - The name of the environment variable.
* @param defaultVal - The default value to use.
* @return !!process.env[name]
*/
function bool(name: string, defaultVal?: boolean) {
return process.env[name]
? isDotEnvTrueBoolean(process.env[name]) || Boolean(process.env[name])
: defaultVal
}
/**
* @param {Name extends keyof ProcessEnv} name - process.env[name] || process.env[NAME]
* @param [defaultVal=undefined] fallback
* @return
*/
function env(
name: string,
defaultVal?: string | number | boolean
): string | number | boolean {
if (defaultVal !== undefined) {
if (isBoolean(defaultVal)) {
return bool(name, defaultVal as boolean)
} else if (isString(defaultVal)) {
return getEnvString(name, defaultVal as string)
} else if (isNumber(defaultVal)) {
return number(name, defaultVal as number)
}
}
const value = hasOwnProp(process.env, name)
? process.env[name]
: process.env[name.toUpperCase()]
return isDotEnvTrueBoolean(value)
? true
: isNumber(value)
? toNumber(value)
: isString(value)
? String(value)
: defaultVal
}
export {
number,
env,
env as get,
env as getEnvVariable,
getEnvString as string,
bool as boolean,
bool,
}