From b59b5a3cc737a20f8336532b8a89086e9348d866 Mon Sep 17 00:00:00 2001 From: Moullisha Date: Fri, 16 Feb 2024 00:50:58 +0530 Subject: [PATCH] resolving npm namespace issue --- src/package-url.js | 2 +- test/package-url.spec.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/package-url.js b/src/package-url.js index e23fc23..e6b747c 100644 --- a/src/package-url.js +++ b/src/package-url.js @@ -198,7 +198,7 @@ class PackageURL { // version is optional - check for existence let version = undefined; - const atSignIndex = path.indexOf('@'); + const atSignIndex = path.lastIndexOf('@'); if (atSignIndex !== -1) { const rawVersion = path.slice(atSignIndex + 1); version = decodeURIComponent(rawVersion); diff --git a/test/package-url.spec.js b/test/package-url.spec.js index 79986cf..d09cb03 100644 --- a/test/package-url.spec.js +++ b/test/package-url.spec.js @@ -77,6 +77,16 @@ describe('PackageURL', function () { }) }); + it('npm PURL with namespace starting with @', function () { + const purlString = 'pkg:npm/@aws-crypto/crc32@3.0.0' + const purl = PackageURL.fromString(purlString) + + assert.strictEqual(purl.type, 'npm') + assert.strictEqual(purl.namespace, '@aws-crypto') + assert.strictEqual(purl.name, 'crc32') + assert.strictEqual(purl.version, '3.0.0') + }); + it('namespace with multiple segments', function () { const purl = PackageURL.fromString('pkg:ty%2Fpe/namespace1/namespace2/na%2Fme') assert.strictEqual('ty/pe', purl.type)