12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 'use strict'
- var dotenvExpand = function (config) {
- // if ignoring process.env, use a blank object
- var environment = config.ignoreProcessEnv ? {} : process.env
- var interpolate = function (envValue) {
- var matches = envValue.match(/(.?\${?(?:[a-zA-Z0-9_]+)?}?)/g) || []
- return matches.reduce(function (newEnv, match) {
- var parts = /(.?)\${?([a-zA-Z0-9_]+)?}?/g.exec(match)
- var prefix = parts[1]
- var value, replacePart
- if (prefix === '\\') {
- replacePart = parts[0]
- value = replacePart.replace('\\$', '$')
- } else {
- var key = parts[2]
- replacePart = parts[0].substring(prefix.length)
- // process.env value 'wins' over .env file's value
- value = environment.hasOwnProperty(key) ? environment[key] : (config.parsed[key] || '')
- // Resolve recursive interpolations
- value = interpolate(value)
- }
- return newEnv.replace(replacePart, value)
- }, envValue)
- }
- for (var configKey in config.parsed) {
- var value = environment.hasOwnProperty(configKey) ? environment[configKey] : config.parsed[configKey]
- config.parsed[configKey] = interpolate(value)
- }
- for (var processKey in config.parsed) {
- environment[processKey] = config.parsed[processKey]
- }
- return config
- }
- module.exports = dotenvExpand
|