Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules-modules / src / dotenv.ts
Size: Mime:
import { resolve } from 'path'

export interface DotEnvObj {
  [key: string]: number | boolean | string
}

// because we need are defining booleans, not stringy bools
export function autofix(obj: DotEnvObj): void {
  Object.keys(obj).forEach(key => {
    const value = obj[key]

    if (value === 'true' || value === true) {
      obj[key] = true
      process.env[key] = 'true'
    } else if (value === 'false' || value === false) {
      obj[key] = false
      // because it isn't providing properly...
      process.env[key] = 'false'
      delete process.env[key]
    } else if (value === 'undefined' || value === undefined) {
      delete process.env[key]
      delete obj[key]
    } else if (typeof value === 'string') {
      const string = value as string
      if (string.startsWith('./')) {
        obj[key] = resolve(process.env.APP_ROOT_PATH, string)
      } else {
        obj[key] = string
      }

      // we set it on obj, now pass to process env
      process.env[key] = obj[key] as string
    } else {
      // number
      process.env[key] = String(value)
    }

    // we put this at the end to get the final value
    process.env.DOT_ENV += `${key}=${obj[key]}\n`
  })
}

// @todo split from autofix
export function setProcessFromObj(obj: DotEnvObj): void {
  autofix(obj)
}