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