From e9147727d094be3f846394c200be510debb4dd70 Mon Sep 17 00:00:00 2001 From: Marco Sirabella Date: Sun, 18 Apr 2021 14:20:07 -0700 Subject: [PATCH] Allow `cache add` to accept multiple specs This is a backwards incompatible change to the undocumented `cache add pkg version`, but Motivations for this can be found here: https://github.com/npm/cli/pull/2976#issuecomment-811511134 Signed-off-by: Marco Sirabella --- lib/cache.js | 24 +++++++++++------------- test/lib/cache.js | 11 ++++++----- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/lib/cache.js b/lib/cache.js index 43902f43bbee1..d920ba61d0a34 100644 --- a/lib/cache.js +++ b/lib/cache.js @@ -97,21 +97,19 @@ with --force.`) ' npm cache add \n' + ' npm cache add \n' log.silly('cache add', 'args', args) - const spec = args[0] && args[0] + - (args[1] === undefined || args[1] === null ? '' : `@${args[1]}`) - - if (!spec) + if (args.length === 0) throw Object.assign(new Error(usage), { code: 'EUSAGE' }) - log.silly('cache add', 'spec', spec) - - // we ask pacote for the thing, and then just throw the data - // away so that it tee-pipes it into the cache like it does - // for a normal request. - await pacote.tarball.stream(spec, stream => { - stream.resume() - return stream.promise() - }, this.npm.flatOptions) + return Promise.all(args.map(spec => { + log.silly('cache add', 'spec', spec) + // we ask pacote for the thing, and then just throw the data + // away so that it tee-pipes it into the cache like it does + // for a normal request. + return pacote.tarball.stream(spec, stream => { + stream.resume() + return stream.promise() + }, this.npm.flatOptions) + })) } async verify () { diff --git a/test/lib/cache.js b/test/lib/cache.js index bbebae8894bab..bad0ede89e101 100644 --- a/test/lib/cache.js +++ b/test/lib/cache.js @@ -134,20 +134,21 @@ t.test('cache add pkg only', t => { }) }) -t.test('cache add pkg w/ spec modifier', t => { +t.test('cache add multiple pkgs', t => { t.teardown(() => { logOutput = [] tarballStreamSpec = '' tarballStreamOpts = {} }) - cache.exec(['add', 'mypkg', 'latest'], err => { + cache.exec(['add', 'mypkg', 'anotherpkg'], err => { t.error(err) t.strictSame(logOutput, [ - ['silly', 'cache add', 'args', ['mypkg', 'latest']], - ['silly', 'cache add', 'spec', 'mypkg@latest'], + ['silly', 'cache add', 'args', ['mypkg', 'anotherpkg']], + ['silly', 'cache add', 'spec', 'mypkg'], + ['silly', 'cache add', 'spec', 'anotherpkg'], ], 'logs correctly') - t.equal(tarballStreamSpec, 'mypkg@latest', 'passes the correct spec to pacote') + t.equal(tarballStreamSpec, 'anotherpkg', 'passes the correct spec to pacote') t.same(tarballStreamOpts, npm.flatOptions, 'passes the correct options to pacote') t.end() })