Skip to content

Commit 7ebc853

Browse files
wraithgarsiemhesda
andauthored
fix(envs): revert behavior of array in npm config (#194)
Reverts environment parsing of config arrays to use indexed names instead of joining them with double newlines. That change appears to have been introduced when the enviromnent values were added back into npm, but not in the same way they were done before. Fixes: npm/cli#3775 --------- Co-authored-by: siemhesda <[email protected]>
1 parent 155c434 commit 7ebc853

File tree

3 files changed

+23
-25
lines changed

3 files changed

+23
-25
lines changed

Diff for: lib/package-envs.js

+20-23
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,29 @@
1-
// https://github.com/npm/rfcs/pull/183
2-
3-
const envVal = val => {
4-
if (Array.isArray(val)) {
5-
return val.map(v => envVal(v)).join('\n\n')
6-
}
7-
if (val === null || val === false) {
8-
return ''
9-
}
10-
return String(val)
11-
}
12-
13-
const packageEnvs = (env, vals, prefix) => {
1+
const packageEnvs = (vals, prefix, env = {}) => {
142
for (const [key, val] of Object.entries(vals)) {
153
if (val === undefined) {
164
continue
17-
} else if (val && !Array.isArray(val) && typeof val === 'object') {
18-
packageEnvs(env, val, `${prefix}${key}_`)
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)
1913
} else {
20-
env[`${prefix}${key}`] = envVal(val)
14+
env[`${prefix}${key}`] = String(val)
2115
}
2216
}
2317
return env
2418
}
2519

26-
module.exports = (env, pkg) => packageEnvs({ ...env }, {
27-
name: pkg.name,
28-
version: pkg.version,
29-
config: pkg.config,
30-
engines: pkg.engines,
31-
bin: pkg.bin,
32-
}, 'npm_package_')
20+
// https://github.com/npm/rfcs/pull/183 defines which fields we put into the environment
21+
module.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+
}

Diff for: lib/run-script-pkg.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ const runScriptPkg = async options => {
6969
path,
7070
scriptShell,
7171
binPaths,
72-
env: packageEnvs(env, pkg),
72+
env: { ...env, ...packageEnvs(pkg) },
7373
stdio,
7474
cmd,
7575
args,

Diff for: test/make-spawn-args.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ t.test('spawn args', async t => {
3939
e.env.npm_package_config_test_null === '' &&
4040
e.env.npm_package_config_test_false === '' &&
4141
e.env.npm_package_config_test_string === pkg.config.test_string &&
42-
e.env.npm_package_config_test_array === pkg.config.test_array.join('\n\n') &&
42+
e.env.npm_package_config_test_array_0 === pkg.config.test_array[0] &&
43+
e.env.npm_package_config_test_array_1 === pkg.config.test_array[1] &&
4344
e.env.npm_package_bin === pkg.bin &&
4445
e.env.npm_package_engines_npm === pkg.engines.npm &&
4546
e.env.npm_package_engines_node === pkg.engines.node &&

0 commit comments

Comments
 (0)