From 0a8ff3ad3e5a48e4312ac3364cf6f2d7fc011b2e Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sat, 1 Aug 2020 19:44:14 +0300 Subject: [PATCH] fix: installing a new dependency with a trailing @ `pnpm add foo@` should install the latest `foo` PR #2742 close #2737 --- .changeset/witty-chicken-eat.md | 5 +++++ packages/supi/src/utils/getPref.ts | 9 ++++++--- packages/supi/test/install/misc.ts | 16 ++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 .changeset/witty-chicken-eat.md diff --git a/.changeset/witty-chicken-eat.md b/.changeset/witty-chicken-eat.md new file mode 100644 index 0000000000..1219c082ad --- /dev/null +++ b/.changeset/witty-chicken-eat.md @@ -0,0 +1,5 @@ +--- +"supi": patch +--- + +Don't fail when installing a dependency with a trailing @. diff --git a/packages/supi/src/utils/getPref.ts b/packages/supi/src/utils/getPref.ts index 53de8984b2..2c2fa4e33b 100644 --- a/packages/supi/src/utils/getPref.ts +++ b/packages/supi/src/utils/getPref.ts @@ -129,9 +129,12 @@ function getPrefPreferSpecifiedSpec ( ) { const prefix = getPrefix(opts.alias, opts.name) if (opts.specRaw?.startsWith(`${opts.alias}@${prefix}`)) { - const selector = versionSelectorType(opts.specRaw.substr(`${opts.alias}@${prefix}`.length)) - if (selector && (selector.type === 'version' || selector.type === 'range')) { - return opts.specRaw.substr(opts.alias.length + 1) + const range = opts.specRaw.substr(`${opts.alias}@${prefix}`.length) + if (range) { + const selector = versionSelectorType(range) + if (selector && (selector.type === 'version' || selector.type === 'range')) { + return opts.specRaw.substr(opts.alias.length + 1) + } } } return `${prefix}${createVersionSpec(opts.version, opts.pinnedVersion)}` diff --git a/packages/supi/test/install/misc.ts b/packages/supi/test/install/misc.ts index e2a00cd974..f59218a173 100644 --- a/packages/supi/test/install/misc.ts +++ b/packages/supi/test/install/misc.ts @@ -188,6 +188,22 @@ test('modules without version spec, with custom tag config', async (t) => { await project.storeHas('dep-of-pkg-with-1-dep', '100.0.0') }) +test('modules without version spec but with a trailing @', async (t) => { + const project = prepareEmpty(t) + + await addDependenciesToPackage({}, ['dep-of-pkg-with-1-dep@'], await testDefaults()) + + await project.has('dep-of-pkg-with-1-dep') +}) + +test('aliased modules without version spec but with a trailing @', async (t) => { + const project = prepareEmpty(t) + + await addDependenciesToPackage({}, ['foo@npm:dep-of-pkg-with-1-dep@'], await testDefaults()) + + await project.has('foo') +}) + test('installing a package by specifying a specific dist-tag', async (t) => { const project = prepareEmpty(t)