Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / @skava/dotenv   js

Repository URL to install this package:

Version: 7.0.7 

/ src / getEnvVariable.ts

import { toNumber, isNumber, isString, isBoolean, hasOwnProp } from 'exotic'

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 any) 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()]

  const final = isDotEnvTrueBoolean(value)
    ? true
    : isNumber(value)
      ? toNumber(value)
      : isString(value)
        ? String(value)
        : defaultVal

  return final as any
}

export {
  number,
  env,
  env as get,
  env as getEnvVariable,
  getEnvString as string,
  bool as boolean,
  bool,
}