From b39a84d5bf6cd15f85e60be55a5de398d94e09c7 Mon Sep 17 00:00:00 2001 From: siemhesda <143130929+siemhesda@users.noreply.github.com> Date: Tue, 16 Jan 2024 10:28:50 -0800 Subject: [PATCH 1/5] fix(envs): revert behavior of array in npm config package.json: ``` { "config": { "array": [ "item1", "item2", "item3" ] }} ``` Before: ``` { "npm_package_config_array": "item1\n\nitem2\n\nitem3" } ``` After ``` { "npm_package_config_array_0": "item1", "npm_package_config_array_1": "item2", "npm_package_config_array_2": "item3" } ``` --- lib/package-envs.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/package-envs.js b/lib/package-envs.js index aa935b2..e79c5b5 100644 --- a/lib/package-envs.js +++ b/lib/package-envs.js @@ -16,6 +16,10 @@ const packageEnvs = (env, vals, prefix) => { continue } else if (val && !Array.isArray(val) && typeof val === 'object') { packageEnvs(env, val, `${prefix}${key}_`) + } else if (Array.isArray(val)) { + val.forEach((item, index) => { + env[`${prefix}${key}_${index}`] = envVal(item) + }) } else { env[`${prefix}${key}`] = envVal(val) } From 400b31462524489eb4ea66fb8f533c54762a4bc9 Mon Sep 17 00:00:00 2001 From: siemhesda <143130929+siemhesda@users.noreply.github.com> Date: Tue, 16 Jan 2024 13:07:44 -0800 Subject: [PATCH 2/5] fix: update envVal function --- lib/package-envs.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/package-envs.js b/lib/package-envs.js index e79c5b5..6cfe440 100644 --- a/lib/package-envs.js +++ b/lib/package-envs.js @@ -1,9 +1,6 @@ // https://github.com/npm/rfcs/pull/183 const envVal = val => { - if (Array.isArray(val)) { - return val.map(v => envVal(v)).join('\n\n') - } if (val === null || val === false) { return '' } @@ -14,12 +11,14 @@ const packageEnvs = (env, vals, prefix) => { for (const [key, val] of Object.entries(vals)) { if (val === undefined) { continue - } else if (val && !Array.isArray(val) && typeof val === 'object') { - packageEnvs(env, val, `${prefix}${key}_`) - } else if (Array.isArray(val)) { - val.forEach((item, index) => { - env[`${prefix}${key}_${index}`] = envVal(item) - }) + } else if (val && typeof val === 'object') { + if (Array.isArray(val)) { + val.forEach((item, index) => { + packageEnvs(env, { [`${key}_${index}`]: item }, `${prefix}`) + }) + } else { + packageEnvs(env, val, `${prefix}${key}_`) + } } else { env[`${prefix}${key}`] = envVal(val) } From 6ef5904f9b2f70ecdc1f635856c34bc8617bb6af Mon Sep 17 00:00:00 2001 From: siemhesda <143130929+siemhesda@users.noreply.github.com> Date: Tue, 16 Jan 2024 13:11:39 -0800 Subject: [PATCH 3/5] fix: update test cases --- test/make-spawn-args.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/make-spawn-args.js b/test/make-spawn-args.js index cc1f719..83e90a0 100644 --- a/test/make-spawn-args.js +++ b/test/make-spawn-args.js @@ -39,7 +39,8 @@ t.test('spawn args', async t => { e.env.npm_package_config_test_null === '' && e.env.npm_package_config_test_false === '' && e.env.npm_package_config_test_string === pkg.config.test_string && - e.env.npm_package_config_test_array === pkg.config.test_array.join('\n\n') && + e.env.npm_package_config_test_array_0 === pkg.config.test_array[0] && + e.env.npm_package_config_test_array_1 === pkg.config.test_array[1] && e.env.npm_package_bin === pkg.bin && e.env.npm_package_engines_npm === pkg.engines.npm && e.env.npm_package_engines_node === pkg.engines.node && From 073018b495358b174601dca1ffbc0ad5a91dd2d9 Mon Sep 17 00:00:00 2001 From: Gar Date: Mon, 22 Jan 2024 08:49:02 -0800 Subject: [PATCH 4/5] fixup: fewer nested if statements --- lib/package-envs.js | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/lib/package-envs.js b/lib/package-envs.js index 6cfe440..4fb5187 100644 --- a/lib/package-envs.js +++ b/lib/package-envs.js @@ -1,31 +1,24 @@ -// https://github.com/npm/rfcs/pull/183 - -const envVal = val => { - if (val === null || val === false) { - return '' - } - return String(val) -} const packageEnvs = (env, vals, prefix) => { for (const [key, val] of Object.entries(vals)) { if (val === undefined) { continue - } else if (val && typeof val === 'object') { - if (Array.isArray(val)) { - val.forEach((item, index) => { - packageEnvs(env, { [`${key}_${index}`]: item }, `${prefix}`) - }) - } else { - packageEnvs(env, val, `${prefix}${key}_`) - } + } else if (val === null || val === false) { + env[`${prefix}${key}`] = '' + } else if (Array.isArray(val)) { + val.forEach((item, index) => { + packageEnvs(env, { [`${key}_${index}`]: item }, `${prefix}`) + }) + } else if (typeof val === 'object') { + packageEnvs(env, val, `${prefix}${key}_`) } else { - env[`${prefix}${key}`] = envVal(val) + env[`${prefix}${key}`] = String(val) } } return env } +// https://github.com/npm/rfcs/pull/183 defines which fields we put into the environment module.exports = (env, pkg) => packageEnvs({ ...env }, { name: pkg.name, version: pkg.version, From 5af107dcd0f6decd3697d387b74829379a7f68d4 Mon Sep 17 00:00:00 2001 From: Gar Date: Mon, 22 Jan 2024 09:03:32 -0800 Subject: [PATCH 5/5] fixup: cleaner packageEnvs --- lib/package-envs.js | 23 ++++++++++++----------- lib/run-script-pkg.js | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/package-envs.js b/lib/package-envs.js index 4fb5187..612f850 100644 --- a/lib/package-envs.js +++ b/lib/package-envs.js @@ -1,5 +1,4 @@ - -const packageEnvs = (env, vals, prefix) => { +const packageEnvs = (vals, prefix, env = {}) => { for (const [key, val] of Object.entries(vals)) { if (val === undefined) { continue @@ -7,10 +6,10 @@ const packageEnvs = (env, vals, prefix) => { env[`${prefix}${key}`] = '' } else if (Array.isArray(val)) { val.forEach((item, index) => { - packageEnvs(env, { [`${key}_${index}`]: item }, `${prefix}`) + packageEnvs({ [`${key}_${index}`]: item }, `${prefix}`, env) }) } else if (typeof val === 'object') { - packageEnvs(env, val, `${prefix}${key}_`) + packageEnvs(val, `${prefix}${key}_`, env) } else { env[`${prefix}${key}`] = String(val) } @@ -19,10 +18,12 @@ const packageEnvs = (env, vals, prefix) => { } // https://github.com/npm/rfcs/pull/183 defines which fields we put into the environment -module.exports = (env, pkg) => packageEnvs({ ...env }, { - name: pkg.name, - version: pkg.version, - config: pkg.config, - engines: pkg.engines, - bin: pkg.bin, -}, 'npm_package_') +module.exports = pkg => { + return packageEnvs({ + name: pkg.name, + version: pkg.version, + config: pkg.config, + engines: pkg.engines, + bin: pkg.bin, + }, 'npm_package_') +} diff --git a/lib/run-script-pkg.js b/lib/run-script-pkg.js index 1495fa3..ea33db5 100644 --- a/lib/run-script-pkg.js +++ b/lib/run-script-pkg.js @@ -69,7 +69,7 @@ const runScriptPkg = async options => { path, scriptShell, binPaths, - env: packageEnvs(env, pkg), + env: { ...env, ...packageEnvs(pkg) }, stdio, cmd, args,