diff --git a/src/packagemanager/npm/parsing/parsePackagesFromInstallArgs.js b/src/packagemanager/npm/parsing/parsePackagesFromInstallArgs.js index e218eef..e731240 100644 --- a/src/packagemanager/npm/parsing/parsePackagesFromInstallArgs.js +++ b/src/packagemanager/npm/parsing/parsePackagesFromInstallArgs.js @@ -86,7 +86,9 @@ function parsePackagename(arg) { const lastAtIndex = arg.lastIndexOf("@"); let name, version; - if (lastAtIndex !== -1) { + // The index of the last "@" should be greater than 0 + // If the index is 0, it means the package name starts with "@" (eg: "@vercel/otel") + if (lastAtIndex > 0) { name = arg.slice(0, lastAtIndex); version = arg.slice(lastAtIndex + 1); } else { diff --git a/src/packagemanager/npm/parsing/parsePackagesFromInstallArgs.spec.js b/src/packagemanager/npm/parsing/parsePackagesFromInstallArgs.spec.js index 990903c..fc3ac85 100644 --- a/src/packagemanager/npm/parsing/parsePackagesFromInstallArgs.spec.js +++ b/src/packagemanager/npm/parsing/parsePackagesFromInstallArgs.spec.js @@ -19,6 +19,14 @@ describe("parsePackagesFromInstallArgs", () => { assert.deepEqual(result, [{ name: "@jest/transform", version: "29.7.0" }]); }); + it("should return the package in the format @vercel/otel", () => { + const args = ["install", "@vercel/otel"]; + + const result = parsePackagesFromInstallArgs(args); + + assert.deepEqual(result, [{ name: "@vercel/otel", version: "latest" }]); + }); + it("should return an array of changes for multiple packages", () => { const args = ["install", "express@4.17.1", "lodash@4.17.21"]; diff --git a/src/packagemanager/npx/parsing/parsePackagesFromArguments.js b/src/packagemanager/npx/parsing/parsePackagesFromArguments.js index 88b737d..efc8d81 100644 --- a/src/packagemanager/npx/parsing/parsePackagesFromArguments.js +++ b/src/packagemanager/npx/parsing/parsePackagesFromArguments.js @@ -81,7 +81,9 @@ function parsePackagename(arg, defaultTag) { const lastAtIndex = arg.lastIndexOf("@"); let name, version; - if (lastAtIndex !== -1) { + // The index of the last "@" should be greater than 0 + // If the index is 0, it means the package name starts with "@" (eg: "@vercel/otel") + if (lastAtIndex > 0) { name = arg.slice(0, lastAtIndex); version = arg.slice(lastAtIndex + 1); } else { diff --git a/src/packagemanager/npx/parsing/parsePackagesFromArguments.spec.js b/src/packagemanager/npx/parsing/parsePackagesFromArguments.spec.js index 4a39c81..2cdc721 100644 --- a/src/packagemanager/npx/parsing/parsePackagesFromArguments.spec.js +++ b/src/packagemanager/npx/parsing/parsePackagesFromArguments.spec.js @@ -19,6 +19,14 @@ describe("parsePackagesFromArguments", () => { assert.deepEqual(result, [{ name: "http-server", version: "14.1.1" }]); }); + it("should return the package in the format @vercel/otel", () => { + const args = ["@vercel/otel"]; + + const result = parsePackagesFromArguments(args); + + assert.deepEqual(result, [{ name: "@vercel/otel", version: "latest" }]); + }); + it("should return the package with latest tag if absent", () => { const args = ["http-server"]; diff --git a/src/packagemanager/pnpm/parsing/parsePackagesFromArguments.spec.js b/src/packagemanager/pnpm/parsing/parsePackagesFromArguments.spec.js index cc9b792..5fc01e8 100644 --- a/src/packagemanager/pnpm/parsing/parsePackagesFromArguments.spec.js +++ b/src/packagemanager/pnpm/parsing/parsePackagesFromArguments.spec.js @@ -27,6 +27,14 @@ describe("standardPnpmArgumentParser", () => { assert.deepEqual(result, [{ name: "axios", version: "latest" }]); }); + it("should return the package in the format @vercel/otel", () => { + const args = ["@vercel/otel"]; + + const result = parsePackagesFromArguments(args); + + assert.deepEqual(result, [{ name: "@vercel/otel", version: "latest" }]); + }); + it("should return the package with latest tag if the version is absent and package starts with @", () => { const args = ["@aikidosec/package-name"]; diff --git a/src/packagemanager/yarn/parsing/parsePackagesFromArguments.js b/src/packagemanager/yarn/parsing/parsePackagesFromArguments.js index 4a6a6a8..7b0255e 100644 --- a/src/packagemanager/yarn/parsing/parsePackagesFromArguments.js +++ b/src/packagemanager/yarn/parsing/parsePackagesFromArguments.js @@ -77,7 +77,9 @@ function parsePackagename(arg, defaultTag) { const lastAtIndex = arg.lastIndexOf("@"); let name, version; - if (lastAtIndex !== -1) { + // The index of the last "@" should be greater than 0 + // If the index is 0, it means the package name starts with "@" (eg: "@vercel/otel") + if (lastAtIndex > 0) { name = arg.slice(0, lastAtIndex); version = arg.slice(lastAtIndex + 1); } else { diff --git a/src/packagemanager/yarn/parsing/parsePackagesFromArguments.spec.js b/src/packagemanager/yarn/parsing/parsePackagesFromArguments.spec.js index 7aa7c32..996153c 100644 --- a/src/packagemanager/yarn/parsing/parsePackagesFromArguments.spec.js +++ b/src/packagemanager/yarn/parsing/parsePackagesFromArguments.spec.js @@ -38,6 +38,14 @@ describe("standardYarnArgumentParser", () => { ]); }); + it("should return the package in the format @vercel/otel", () => { + const args = ["add", "@vercel/otel"]; + + const result = parsePackagesFromArguments(args); + + assert.deepEqual(result, [{ name: "@vercel/otel", version: "latest" }]); + }); + it("should ignore options with parameters and return an array of changes", () => { const args = ["add", "--proxy", "http://localhost", "axios@1.9.0"];