1const packageEnvs = (vals, prefix, env = {}) => { 2 for (const [key, val] of Object.entries(vals)) { 3 if (val === undefined) { 4 continue 5 } else if (val === null || val === false) { 6 env[`${prefix}${key}`] = '' 7 } else if (Array.isArray(val)) { 8 val.forEach((item, index) => { 9 packageEnvs({ [`${key}_${index}`]: item }, `${prefix}`, env) 10 }) 11 } else if (typeof val === 'object') { 12 packageEnvs(val, `${prefix}${key}_`, env) 13 } else { 14 env[`${prefix}${key}`] = String(val) 15 } 16 } 17 return env 18} 19 20// https://github.com/npm/rfcs/pull/183 defines which fields we put into the environment 21module.exports = pkg => { 22 return packageEnvs({ 23 name: pkg.name, 24 version: pkg.version, 25 config: pkg.config, 26 engines: pkg.engines, 27 bin: pkg.bin, 28 }, 'npm_package_') 29} 30