From f1b6e83db7541ad145838b5970e6fa102bc5cbce Mon Sep 17 00:00:00 2001 From: Ruy Adorno Date: Fri, 28 Aug 2020 22:23:32 -0400 Subject: [PATCH] fix: exec legacyPeerDeps `npm exec` wasn't forwarding legacyPeerDeps to `arb.reify()` --- lib/exec.js | 4 ++-- test/lib/exec.js | 40 +++++++++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/lib/exec.js b/lib/exec.js index 7bd864cc6ccf9..102e5adc578fc 100644 --- a/lib/exec.js +++ b/lib/exec.js @@ -63,7 +63,7 @@ const escapeArg = require('./utils/escape-arg.js') const cmd = (args, cb) => exec(args).then(() => cb()).catch(cb) const exec = async args => { - const { package: packages, call } = npm.flatOptions + const { package: packages, call, legacyPeerDeps } = npm.flatOptions if (call && args.length) { throw usage @@ -141,7 +141,7 @@ const exec = async args => { throw 'canceled' } } - await arb.reify({ add }) + await arb.reify({ legacyPeerDeps, add }) } pathArr.unshift(resolve(installDir, 'node_modules/.bin')) } diff --git a/test/lib/exec.js b/test/lib/exec.js index bd5964cfe443b..4d711cfbcaec6 100644 --- a/test/lib/exec.js +++ b/test/lib/exec.js @@ -23,7 +23,8 @@ const npm = { flatOptions: { yes: true, call: '', - package: [] + package: [], + legacyPeerDeps: false }, localPrefix: 'local-prefix', config: { @@ -87,6 +88,7 @@ t.afterEach(cb => { READ.length = 0 READ_RESULT = '' READ_ERROR = null + npm.flatOptions.legacyPeerDeps = false npm.flatOptions.package = [] npm.flatOptions.call = '' cb() @@ -151,7 +153,7 @@ t.test('npm exec foo, not present locally or in central loc', async t => { }) t.strictSame(MKDIRPS, [installDir], 'need to make install dir') t.match(ARB_CTOR, [ { package: ['foo'], path } ]) - t.strictSame(ARB_REIFY, [{add: ['foo@']}], 'need to install foo@') + t.strictSame(ARB_REIFY, [{add: ['foo@'], legacyPeerDeps: false}], 'need to install foo@') t.equal(PROGRESS_ENABLED, true, 'progress re-enabled') const PATH = `${resolve(installDir, 'node_modules', '.bin')}${delimiter}${process.env.PATH}` t.match(RUN_SCRIPTS, [{ @@ -229,7 +231,7 @@ t.test('npm exec foo, present locally but wrong version', async t => { }) t.strictSame(MKDIRPS, [installDir], 'need to make install dir') t.match(ARB_CTOR, [ { package: ['foo'], path } ]) - t.strictSame(ARB_REIFY, [{ add: ['foo@2.x'] }], 'need to add foo@2.x') + t.strictSame(ARB_REIFY, [{ add: ['foo@2.x'], legacyPeerDeps: false }], 'need to add foo@2.x') t.equal(PROGRESS_ENABLED, true, 'progress re-enabled') const PATH = `${resolve(installDir, 'node_modules', '.bin')}${delimiter}${process.env.PATH}` t.match(RUN_SCRIPTS, [{ @@ -360,7 +362,7 @@ t.test('run command with 2 packages, need install, verify sort', t => { }) t.strictSame(MKDIRPS, [installDir], 'need to make install dir') t.match(ARB_CTOR, [ { package: packages, path } ]) - t.strictSame(ARB_REIFY, [{add}], 'need to install both packages') + t.strictSame(ARB_REIFY, [{add, legacyPeerDeps: false}], 'need to install both packages') t.equal(PROGRESS_ENABLED, true, 'progress re-enabled') const PATH = `${resolve(installDir, 'node_modules', '.bin')}${delimiter}${process.env.PATH}` t.match(RUN_SCRIPTS, [{ @@ -502,7 +504,7 @@ t.test('prompt when installs are needed if not already present', async t => { }) t.strictSame(MKDIRPS, [installDir], 'need to make install dir') t.match(ARB_CTOR, [ { package: packages, path } ]) - t.strictSame(ARB_REIFY, [{add}], 'need to install both packages') + t.strictSame(ARB_REIFY, [{add, legacyPeerDeps: false}], 'need to install both packages') t.equal(PROGRESS_ENABLED, true, 'progress re-enabled') const PATH = `${resolve(installDir, 'node_modules', '.bin')}${delimiter}${process.env.PATH}` t.match(RUN_SCRIPTS, [{ @@ -656,3 +658,31 @@ t.test('abort if -n provided', async t => { t.strictSame(RUN_SCRIPTS, []) t.strictSame(READ, []) }) + +t.test('forward legacyPeerDeps opt', async t => { + const path = t.testdir() + const installDir = resolve('cache-dir/_npx/f7fbba6e0636f890') + npm.localPrefix = path + ARB_ACTUAL_TREE[path] = { + children: new Map() + } + ARB_ACTUAL_TREE[installDir] = { + children: new Map() + } + MANIFESTS.foo = { + name: 'foo', + version: '1.2.3', + bin: { + foo: 'foo' + }, + _from: 'foo@' + } + npm.flatOptions.yes = true + npm.flatOptions.legacyPeerDeps = true + await exec(['foo'], er => { + if (er) { + throw er + } + }) + t.strictSame(ARB_REIFY, [{add: ['foo@'], legacyPeerDeps: true}], 'need to install foo@ using legacyPeerDeps opt') +})