From 4c49af75d02f4a2428a850b20321246ddc8840fe Mon Sep 17 00:00:00 2001 From: Toby Smith Date: Mon, 20 Nov 2023 18:54:19 +0000 Subject: [PATCH] Add support for pnpm 7.33.0 --- .../resolvePnpmDependencies.ts | 12 ++++++--- .../resolvePnpmDependencies.spec.ts | 25 +++++++++++-------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/packages/generate-license-file/src/lib/internal/resolveDependencies/resolvePnpmDependencies.ts b/src/packages/generate-license-file/src/lib/internal/resolveDependencies/resolvePnpmDependencies.ts index bf88cb5e..d9156093 100644 --- a/src/packages/generate-license-file/src/lib/internal/resolveDependencies/resolvePnpmDependencies.ts +++ b/src/packages/generate-license-file/src/lib/internal/resolveDependencies/resolvePnpmDependencies.ts @@ -37,17 +37,23 @@ export const resolveDependenciesForPnpmProject = async ( } }; +const allowedPnpmMinorVersions: Record = { + 8: 0, + 7: 33, +}; + const verifyPnpmVersion = async () => { const pnpmVersion = await getPnpmVersion(); - if (pnpmVersion.major === 8) { + const allowedMinorVersion = allowedPnpmMinorVersions[pnpmVersion.major]; + if (allowedMinorVersion !== undefined && pnpmVersion.minor >= allowedMinorVersion) { return; } const errorLines = [ `Unsupported pnpm version: ${pnpmVersion.major}.${pnpmVersion.minor}.${pnpmVersion.patch}.`, - "Generate license file currently only supports pnpm version 8.x.x", - "Please either switch to pnpm version 8 or raise an issue on the generate-license-file repository for us to support your version of pnpm:", + "Generate license file currently only supports pnpm versions >=7.33.0 & >=8.0.0", + "Please either switch to a supported version of pnpm or raise an issue on the generate-license-file repository for us to support your version of pnpm:", "https://github.com/TobyAndToby/generate-license-file", ]; diff --git a/src/packages/generate-license-file/test/internal/resolveDependencies/resolvePnpmDependencies.spec.ts b/src/packages/generate-license-file/test/internal/resolveDependencies/resolvePnpmDependencies.spec.ts index cb36432d..c656fe22 100644 --- a/src/packages/generate-license-file/test/internal/resolveDependencies/resolvePnpmDependencies.spec.ts +++ b/src/packages/generate-license-file/test/internal/resolveDependencies/resolvePnpmDependencies.spec.ts @@ -60,14 +60,14 @@ describe("resolveDependenciesForPnpmProject", () => { afterAll(() => jest.restoreAllMocks()); - describe("when the pnpm version is not 8.x.x", () => { + describe("when the pnpm version is less than 7.33.0", () => { it("should throw an error", async () => { - mockedGetPnpmVersion.mockResolvedValue({ major: 7, minor: 6, patch: 5 }); + mockedGetPnpmVersion.mockResolvedValue({ major: 7, minor: 32, patch: 999 }); await expect(resolveDependenciesForPnpmProject).rejects.toThrow( - "Unsupported pnpm version: 7.6.5.\n" + - "Generate license file currently only supports pnpm version 8.x.x\n" + - "Please either switch to pnpm version 8 or raise an issue on the generate-license-file repository for us to support your version of pnpm:\n" + + "Unsupported pnpm version: 7.32.999.\n" + + "Generate license file currently only supports pnpm versions >=7.33.0 & >=8.0.0\n" + + "Please either switch to a supported version of pnpm or raise an issue on the generate-license-file repository for us to support your version of pnpm:\n" + "https://github.com/TobyAndToby/generate-license-file", ); }); @@ -81,9 +81,12 @@ describe("resolveDependenciesForPnpmProject", () => { }); }); - describe("when the pnpm version is 8.x.x", () => { + describe.each([ + { major: 7, minor: 33, patch: 0 }, + { major: 8, minor: 0, patch: 0 }, + ])("when the pnpm version is a supported version (%p)", pnpmVersion => { it("should call getPnpmProjectDependencies", async () => { - mockedGetPnpmVersion.mockResolvedValue({ major: 8, minor: 6, patch: 5 }); + mockedGetPnpmVersion.mockResolvedValue(pnpmVersion); mockedGetPnpmProjectDependencies.mockResolvedValue([]); await resolveDependenciesForPnpmProject("/some/path/package.json", new Map()); @@ -93,7 +96,7 @@ describe("resolveDependenciesForPnpmProject", () => { }); it("should pass the replace option to resolveLicenseContent", async () => { - mockedGetPnpmVersion.mockResolvedValue({ major: 8, minor: 6, patch: 5 }); + mockedGetPnpmVersion.mockResolvedValue(pnpmVersion); mockedGetPnpmProjectDependencies.mockResolvedValue([dependency1]); const replace = { "some-package@1.0.0": "/some/path/to/license.txt" }; @@ -105,7 +108,7 @@ describe("resolveDependenciesForPnpmProject", () => { }); it("should call resolveLicenseContent for each dependency", async () => { - mockedGetPnpmVersion.mockResolvedValue({ major: 8, minor: 6, patch: 5 }); + mockedGetPnpmVersion.mockResolvedValue(pnpmVersion); mockedGetPnpmProjectDependencies.mockResolvedValue([dependency1, dependency2, dependency3]); await resolveDependenciesForPnpmProject("/some/path/package.json", new Map()); @@ -117,7 +120,7 @@ describe("resolveDependenciesForPnpmProject", () => { }); it("should add the license content to the licensesMap if it is not null", async () => { - mockedGetPnpmVersion.mockResolvedValue({ major: 8, minor: 6, patch: 5 }); + mockedGetPnpmVersion.mockResolvedValue(pnpmVersion); mockedGetPnpmProjectDependencies.mockResolvedValue([dependency1, dependency2, dependency3]); const licensesMap = new Map>(); @@ -132,7 +135,7 @@ describe("resolveDependenciesForPnpmProject", () => { describe("when the dependency is in the exclude list", () => { it("should not call resolveLicenseContent", async () => { - mockedGetPnpmVersion.mockResolvedValue({ major: 8, minor: 6, patch: 5 }); + mockedGetPnpmVersion.mockResolvedValue(pnpmVersion); mockedGetPnpmProjectDependencies.mockResolvedValue([dependency1, dependency2, dependency3]); await resolveDependenciesForPnpmProject("/some/path/package.json", new Map(), {